AnnotationProcessor refactoring.

* Better exception handling (exception message is constructed hierarchically)
* More extensible/clear code
* private methods have now default visibility to allow writing unit tests against them