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 <<".
add support for units to DataTag
disallow "" as valid unit, must be given as "none"
moved docstring of unit sanitizer to util header
none unit testing, fixes
improve getOffsetAndCount to handle optional extents and units
add test case for valid and invalid units in DataTag
enable unit sanitizer during setting of units, added test
Removed all tailing whitespaces in validation code
Fixed "!check(val) || errOccured" => "errOccured || !check(val)"
Replaced "strPair" with "Message" struct as propsed by @stoewer
unit setter improved using transform and lambda construct
Merge pull request #241 from jgrewe/data_tag_unit

Add unit support for DataTags ...

LGTM ;-)
[test] Dimension: SampledDimension::label: fix test for none
DimensionHDF5::label: correctly return none if attr is not set
[test] SampledDimension::unit: correctly test for none return
DimensionHDF5::unit: correctly return none if attr is not set
Merge pull request #243 from gicmo/issue_233_sd

Fix none returns for SampledDimension
Merge pull request #236 from balint42/validation_concept

Switched from usage of "msg" string to "id-msg-pair" throughout code

OK
[test] RangeDimension::unit: fix test for none return case