OGM-208 Metadata API proposal number 2: Create common classes that can be extended

Previous pull request: https://github.com/hibernate/hibernate-ogm/pull/196
JIRA: https://hibernate.atlassian.net/browse/OGM-208
Initial solution: https://github.com/hibernate/hibernate-ogm/pull/211

This solution fix the problem in the previous pull requests and implements the second approach from  @gunnarmorling proposals.
The idea is to have some common classes that can be extended to create new API for different datastore providers.
These are the classes to extends:
* [NoSqlGlobalContextImpl.java](https://github.com/DavideD/hibernate-ogm/blob/036484b69fbc82c00cc9e1178273dfc3621dfa0b/hibernate-ogm-core/src/main/java/org/hibernate/ogm/options/navigation/impl/NoSqlGlobalContextImpl.java)   
* [NoSqlEntityContextImpl.java](https://github.com/DavideD/hibernate-ogm/blob/036484b69fbc82c00cc9e1178273dfc3621dfa0b/hibernate-ogm-core/src/main/java/org/hibernate/ogm/options/navigation/impl/NoSqlEntityContextImpl.java)
* [NoSqlPropertyContextImpl.java](https://github.com/DavideD/hibernate-ogm/blob/036484b69fbc82c00cc9e1178273dfc3621dfa0b/hibernate-ogm-core/src/main/java/org/hibernate/ogm/options/navigation/impl/NoSqlPropertyContextImpl.java)

MongoDB extends these classes in https://github.com/DavideD/hibernate-ogm/commit/3e4a301cbfd3b9be486777b424e3667d90771d53


This branch and the branch with the alternative proposal have a common series of commits, they started to differ after the commit: https://github.com/DavideD/hibernate-ogm/commit/4916606cab6c8aedbac566a281ff608ff73d35aa OGM-208 Add common mapping implementation classes 

Branch 208-v4-common grouped all the common commits and it is the starting branch for both solutions