I've heard that Scala has path-dependent types. It's something to do with inner-classes but what does this actually mean and why do I care?