merge JsonProvider's getMapValue methods, various small performance improvements

I merged the two `getMapValue` methods in the `JsonProvider` interface. The method is now required to return `JsonProvider.UNDEFINED` if the map does not contain the value.
Also, I made some methods static and extracted some classes.