Complete rewrite of the annotation layer

*Sorry in advance for the wall of text!*

This PR aims to provide a drop-in replacement for the current annotation code. In my opinion the current code is not structured enough, incomplete, not documented enough and it lacks basic testing. My goals with this PR are to provide a solid framework to create and present annotations in which we can easily implement new annotation types. It provides the necessary abstraction to do this.

The basis of this PR is the base class `Annotation`. It contains all information a basic annotation should have. Specific annotation types, such as Link or Text, will extend this base class with their own specific methods (see `src/core/annotation_types/link_annotation.js` for example). This is not only a nice way to work with annotations, but it's also what the PDF specification recommends.

The existing `AnnotationUtils` class and `web/page_view.js` have been rewritten to work with this new framework, but they have also been simplified a lot because most logic is now where it belongs: either in the annotation object itself or in `annotation_handler.js`. I wanted to avoid having styles for example being applied in many places, which is what happens in the current code. Doing so makes sure that for example `page_view.js` only deals with printing the annotations and not also with styling them anymore.

Aside from rewriting the current annotation layer for the sake of readability, structure and maintainability, I also felt that the current implementation was incomplete at some points and almost none of it was documented. What I did was read the entire part of the PDF specification on annotations and made an exhaustive overview of all features the annotation layer should have. This has been done so we know exactly what we do and do not support currently. This can be found in the implementation overview document (see below).

After having made the abovementioned overview, I have also implemented some new features that were missing in the previous implementation layer. Examples are:

- Implemented full support for radii in a Border dictionary.
- Implemented full support for colorspaces used by annotations.
- Implemented full support for the 'underline' border style.
- Implemented partial support for the 'dashed' border style (because of CSS limitations we can also show the default dashed border style, but it's better than showing nothing).
- Improved handling of `GoToR` link types.

Finally, after rewriting everything and adding new features, I decided to fix the lack of tests. I have added unit tests for practically all features of the annotation layer that are currently implemented.

This is still a work in progress. The to do list can be found in the implementation overview document (see below).

I have prepared a ZIP file with eight test documents for the Link annotation and the implementation overview document as referenced above. This file can be downloaded from [link coming up].
i do not think you want to do the viewport.transform.join in that for loop, do you?