Writer cleanups

- Split the writer classes in to runtime/ and compiler/ depending which
  project they're generating for

- Rename GeneratedFileComment to GeneratedClikeFileComment. This comment
  won't work for LLVM IR which uses ;

- Rename WriteCellMembmers => WriteCellMembers to fix typo

- Make the writers inherit from writer.OutputWriter so they can be
  treated directly as a function and their apply signature is checked
Add generation for cellTypes.ll

This output is incompatible with CellType.scala (the last ungenerated
file) due to the TBAA node numbering being different.
Add LlvmTypeToScalaConstructor

This takes a subset of LLVM IR types and build a Scala string for
constructing the same type. This will be required for generating
CellType.scala which encodes LLVM field types.
Switch fieldTbaaNodes to ListMap

This doesn't create a functional difference but makes our output
stable, preventing spurious diffs
ProcessedTypes/CellClass cleanup

- Rename CellClass.{optionalParent => parentOption}. This is consistent
  with headOption, tailOption, etc in the Scala standard library

- Precompute a map of parent => child class in ProcessedTypes and port
  CheckChildlessAbstractCellClasses. This will be needed in our
  CellClass.scala writer
Add support for field initializers

This allows simple integer initializers for fields. This will be used to
pre-initialize our gcState to 0 for cells created as constants