First implementations of 'MetaProperty'

:exclamation: *This pull request is incomplete*

## Functionality

It provides three implementations of `MetaProperty`:

* `FunctionalMetaProperty` which uses functional interfaces to access the value and annotations
* `FieldMetaProperty` which reflects on a field to access the value and annotations
* `MethodMetaProperty` which reflects on get and set methods to access the value and annotations

These classes have a common superclass `AbstractMetaProperty` which does all the wiring and only leaves the actual value and annotation access to its subclasses.

All classes are only package visible. I plan to create a public `MetaPropertyBuilder` which allows the transparent instantiation of one of the implementations. It will also check arguments for validity (e.g. not null), which is currently not being done.

If this approach is approved I will do it in a separate pull request.

## Tests

The pull request contains tests for the three classes. In order to make sure, that all implementations execute the exact same tests, there is an abstract superclass for tests. It only leaves the creation of instances and detailed annotation checking to its subclasses.

I included TestNG and Mockito in the pom.
Any ideas how to write meaningful tests for `hashCode` without fixing the hash function? In case this could turn into a longer discussion, we could keep the TODO and create a ticket to discuss it there.