Extract custom fonts into an extension.

Currently, a lot of our classes have a very large amount of code,
implementing many different features, all mixed together. This is quite
hard to manage and makes the code overly complex.

What I am aiming to do is separate out some of the code that does
related things, offering a better paradigm for implementing new features
that does not clutter the existing code.

As a proof of concept, I am aiming to extract the Custom Fonts support
(which I wrote and therefore know reasonably well) into a set of classes
that separate classes that define anything relating to that particular
feature, so that the rest of the code does not need to know about it.

This is a work in progress: it will take a bit of time to get to the
perfect solution; but it is a step forward in that direction. Probably
things will change as I go along, so nothing is really final yet.
Merge pull request #132 from flerda/v2.1-customfonts

Extract custom fonts into an extension.