ivory-backend-c: Generate prototypes for private areas.

- As with functions, put prototypes in the header for public
  areas and in the source file for private areas.
ivory: Add VarLitName for unmangled generated names.

- These are needed for names that are generated from the
  name of a 'MemArea', which is not itself mangled.
ivory: Enhance initializers to work with DynArray values.

- Added internal initializer AST that can represent
  initializers that require intermediate values with
  fresh names.
- Run initializers in the context of a monad that supplies
  fresh names.  The 'Ivory' monad is used for stack-allocated
  data, and a 'State' monad with a counter is used to generate
  fresh names for MemArea initializers.
- Add 'idynarray' function to return a DynArray initializer.
- Removed 'DynMemArea' in favor of using a normal MemArea
  with an 'idynarray' initializer.
ivory: Add withDynArrayData function.

- This is used to get a CArray/length pair from a DynArray.
ivory-examples: Update DynArray example.

- Now compiles and runs under Linux.
ivory: Add cast in DynArray init to suppress warning.

- Prevents warnings about initializers discarding the 'const'
  qualifier for const dynarrays.