Parametrise AST with annotations.

This will allow us to refine the actual syntax tree throughout the
compilation pipeline, perhaps eventually moving towards a nanopass
compiler architecture.
Make type checker handle arbitrary lores.
Add banner to futharki.
Integrate the new lore-based annotations more deeply.

Sorry for the huge commit.

This also breaks predicate optimisation.