Annotations

* Move `@NotNull` and `@Nullable` to their own assembly
* Add `NullUsageProcessor` annotation processor to validate correct usage (at compile time) of the annotations in many scenarios

The following is a list of the scenarios analyzed and reported by this processor during the build process.

 * **Error:** an element is annotated with both `@NotNull` and `@Nullable`.
 * **Error:** an method which returns `void` is annotated with `@NotNull` or `@Nullable`.
 * **Error:** an element with a primitive type is annotated with `@Nullable`.
 * **Error:** a parameter is annotated with `@NotNull`, but the method overrides or implements a method where the parameter is annotated `@Nullable`.
 * **Error:** a method is annotated with `@Nullable`, but the method overrides or implements a method that is annotated with `@NotNull`.
 * **Warning:** an element with a primitive type is annotated with `@NotNull`.
 * **Warning:** a parameter is annotated with `@NotNull`, but the method overrides or implements a method where the parameter is not annotated.
 * **Warning:** a method is annotated with `@Nullable`, but the method overrides or implements a method that is not annotated.