Validation

So I finally decided to make this a pull request before it grows even bigger. Sorry for the size, but at least its broken down into many tiny commits. :-)

This is close to the final version of the entity validation: I have little more that I could add without further input. In particular I would appreciate input on what to validate in / on: Block & Feature entities.

The following changes go beyond just the validation and might need discussion:
-As proposed in the issues I have implemented ```as*Dimension``` type specific getter in the ```Dimension``` entity. Therefore changing the order in which the classes get defined in ```Dimension.hpp``` was necessary.
-As proposed in the mailing list in some classes I split the multi-getter (e.g. ```references```) into two overloads instead of one method with default parameter to allow passing it to the validation.
I would strongly prefer modern (i.e. C++11) style, e.g. range-based loops (`for (auto &element : container) { ... }`).
Here actually I would prefer `std::find_if` which brings me to me next point here.
More importantly: are you sure this does what you want? Since you are not breaking the loop you are overriding has_empty and are basically returning whether the last element is empty.