Switched from usage of "msg" string to "id-msg-pair" throughout code

Changed the validation code to not just use simple string msgs as return status of validation tests but msg-id-pairs.
Thus in "conditions" and "Results" the "msg" var now is an std::pair<std::string, std::string>. All necessary methods have been adapted to handle this pair or vectors of it.
The id is acquired from a call to "parent.id()" which has been implemented in a way that tolerates "parent" objects without id method. To achieve this a new small helper lib with two SFINAE classes has been added. On parents without id method the id "unknown" is returned. Furthermore the id can be of any type known to "stringstream <<".