diff strategy for maps

* added diff strategy for maps
* refactored exceptions to provide factory methods for different usages