Introduced visitors into datamodel and JSON converter

* New interfaces ValueVisitor and SnakVisitor can be used to avoid
casting objects of these types
* Renamed ConverterImpl to JsonConverter; restricted public interface to
methods for handling EntityDocuments; removed Converter interface as it
is not needed
* Split JsonConverter into several classes by extracting the respective
visitors
* Extracted constants from JsonConverter
* Renamed "jsonconverter" package to "json"
* Updated tests accordingly

A lot of code has been moved and renamed in this commit. Although much of the moved code is unchanged, the diff is probably not of much use. Best approach for review might be to just ignore the diff and review the changed files as they are now (the changes in datamodel.implementation are trivial; the main differences are in the json package).