Annoatation processing

This provides annotation processing, and changes Converter from
an interface to an abstract base class.

This will all allow for a user to annotate POJO and store it, without
needing to provide any additional information.

resolves #355