Add implementation-specific imperative types.

The two new types are `TNamed` for referencing type synonyms, and `TClass` for
constructing composite types. Neither should be produced by the parser, nor
should the typechecker do anything other than scream if it encounters one of
them.
Add `DType` definition with necessary pretty definitions.
Fix L.K3.R.Options to work with the new optparse-applicative.

An altogether unnecessary fix to an altogether avoidable problem.
Merge branch 'master' into focus/cpp
Add stubs of imperative transformation types and functions.
Merge branch 'focus/cpp' of github.com:DaMSL/K3-Core into focus/cpp
Rename DType -> DTypeDef, and add corresponding constructor.
Fix missing refactorings for DTypeDef.
Add while-loop expression forms for imperative embeddings.
Add EImplementationType annotation for additional type information.
Add initial rewrite-rule implementation for expressions.

Non-exhaustive pattern-matches need to be handled by throwing an error for cases
which couldn't possibly have typechecked.
Refactor annotation name-mangling to common location for Codegen.
Add declaration rules for imperative transform.
Initial CPP generation with expressions, constants and operators.
Define Reification Context data type.
Unary/Binary operator generation reorganization.
Define K3 -> C++ type conversion.
Define initial transformation functions for inline/reification.
Miscellaneous fixes to satisfy the build.
Fix awkward occurrences of <$> in different contexts.