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.

:thumbsup: @bestie would be proud