Compaction

Initial attempt at compaction. Note that this is incomplete, due to open questions about:

- how to type and compose reductions
- how to type null parses
- destructuring languages flexibly at more than a single level
- whether combinators should exist