Feature angular ui

DO NOT MERGE - for discussion only
Don't we also need `findByName` for definitions? That was the purpose of the line data structure `{id:..., name:..., code:...}`. Specifically, we need to ensure the following invariants:

(1) There are never multiple definitions of the same variable name.
(2) For each line in the corpus, each free variable of the line are defined in the corpus.

This puts constraints on valid `create`, `update` and `remove` operations.