Refactor: Moving and renaming things around for better visibility.
Refactor: make recorder a configuration options to fix tests.
Refactor: split up parsing without Model support.

This will hopefully clear the ground for testing and more refactoring.

Models need to be passed down and collected on the `ApiDeclaration` level.
Refactor: restructure model parsing, pass down parsed models.

This approach has revealed an issue with clashing naming: if two types
have the same `@XmlRootElement` name, they will have the same model IDs.

In the old code this was not apparent because they got overwritten in
the model collecting map, but this collection mechanism relies on
`equals`/`hashCode` to remove/skip already parsed Models.

This issue will have to be resolved somehow.
Extract type/field/method to translation class and resolve name clashes.

Conflict resolving works for JAXB annotated type names, since the other
naming is based on the qualified type name, which should not clash.
The conflict is resolved by adding "_" characters at the end until it
is no longer conflicting.

Potentially this will resolve "conflicts" between classes not related
to each other, so a resource might have a documentation with class name
ending with "_", with similar class names.
New JAXB field/method aware translator.

Next step should be fallback-chaining of translators, so it can be
chained at the beginning: try A, if null try B, if null C, etc.
Fixing findbugs error about string concatenation in loops.
Applying AnnotationParser to other places doing its job.
Adding Jackson @Json... annotation translator and chain resolver.

The "chain resolver" is `FirstNotNullTranslator`. Its `addNext` method
can be used to add another translator to the chain. As the name suggests,
the first not null value returned by the chain will be returned in the
end.
Change output to be more inline with swagger-core.

There is still a lot of things to be done:
- "api.operation.parameter.description" is not required
- "api.operation.parameter.required" is sometimes different in swagger-core
- "api.operation.parameter.allowMultiple" should be included
Adding history.
Re-adding model skipping if it has no properties.

This was overlooked in the refactoring.
Make all models use Guava for equals/hashCode/toString.
Add support for enum classes.

Enum classes will be handled as string properties with a list of allowed
values.
Move translator to options to lessen cluttering of code.
Refactor: get tools out of test class in preparation for more tests.
Clarify API resource/api grouping comment in code.
Do not include empty values in generated JSON.
Enable DocletOptions to be constructed without RootDoc.

This is to enable easier testing; and there is no reasonable requirement
on binding it to RootDoc since it has reasonably OK defaults.
Fix type resolving bug with Types not having ClassDocs.

It also fixes the default return type for primitives; these classes
should not know how the fallback naming should operate and should just
return null if there are any problems.