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.
The objects against which the equality tests are run are essentially mocks. They exist to ensure that only the bean and the property name are used for tests (accessing anything else throws an exception).

The test you describe seems to compare two units under test. Would you recommend this?

I opt for leaving this ToDo in and I'll create a ticket once the pull request is merged.