Pass explicit *-kinds to Proc and Area.

- Prevents these promoted types from being too polymorphic
  (which can be a problem when doing something like a ProcPtr
  with an empty argument list).
ivory: Move 'assign' into Ivory.Language.Monad

- This allows us to use it in other built-in Ivory modules, which
  is useful when defining dynamic array operations.
ivory: Implement dynamic arrays.

- Added new type to AST.
- Added new initializer type, not exported.
- Added AST expressions to access dynamic array length and
  data fields.
- Added AST statement to map over a dynamic array.
- Added exported functions to create dynamic arrays and perform
  a checked conversion back to a fixed-size array.
- Added 'DynArray' example to 'ivory-examples'.
ivory: Define an 'IvoryInit' instance for 'ProcPtr'.

- Needed to store proc pointers in structures.
ivory-opts: Recurse into DynArrayMap statements.