Introduce FontFamily and FontVariationDescription

*In progress.* This pull request is an internal rewrite of how font family names and font variation descriptions are passed around. Currently this is done using a pair of font family names and an object containing font family names and descriptions. This pull request introduces a FontFamily class that contains FontVariationDescription instances. This will reduce the number of parameters passed around, makes type annotations easier to read and creates a central place to manipulate font families and font variations.