Extract dimension from dimensions

This is another more OO approach to #549 

It attempts to remove the duplication in the class by splitting it up in its dimensions... e.g. the x-axis and the y-axis are totally independent from each other - which is what we want to leverage.

NOT READY TO MERGE YET - one big thing reamaining:

- [ ] wire it up with the Dimensions class (not done yet, would love to get feedback before that)
- [ ] handle `ParentDimensions` which until now relied on the ability to get instance variables to see if they've been set (as some return a default value of 0 through the getters)

I tried to spec out the important parts. The tests seem kind of duplicated with Dimensions for now - I'd like to keep the Dimensions tests in place though as they run fast and provide integration tests. Especially for this huge refactoring I'm glad to have them around :)

Cheers,
Tobi