Build parser

## Summary

Fleshing out, refactoring and tidying up the parser.

Some key changes:
- Added coversheet/start button parsing
- Refactor parser into element parsers which are separately unit tested
- Add tests which combine element parsing and transformation

## Background

The way that parslet works is using *parsers* and *transforms*. A parslet parser builds a deeply nested hash representing the the parse tree. This is then converted into the model by a transform. I struggled to come up with a name for the thing which coordinates this combined process and settled on 'interpreter', but I'm open to offers!

The `NodeInterpreter` is therefore the thing which will parse a single node file and produce a `Node` model. The `FlowInterpreter` will parse a package of smartdown files (a concrete implementation of this is `DirectoryInput`), and return a flow containing many nodes.

this is what I was saying about the heading structure being a bit vague at the moment. This assumes that the first 'block' is a heading. I think we probably want to require this. If we do not, then how would we present such a question (eg. one which had e.g. [para, h1, para, question def])?