Split into separate Context and HTMLContext files

This is the start of work that should later allow separate contexts for HTML, CSS, SVG, and more. All of the HTML-specific stuff should have been moved to its own file, meaning it can be used for other contexts.
Standardise on camelCase
Abstract out common 'string to set' operations

For speed/cleanliness reasons, CoffeeMugg uses objects of { 'tag name' => true } that get generated from splitting strings on whitespace. This is both fast and easy to add more tag names. Now that functionality is abstracted out!

Also, turn a few properties into variables inside the closure that didn't need to be properties.
Remove newline tracking

Tracking whether the buffer is empty works just fine.
Replace indent string with indent count
Take out rendering from string

I think this is more likely to just cause errors when users accidentally pass in strings instead of functions.