Add generation of CellType.scala

This is largely source compatible with the previous version but the
implementation and been restructured to be less repetitive and remove
the unused "isAbstract" field. The only functional different is
per-field TBAA nodes which will prevent different fields in the same
datum from aliasing each other.
Add Scaladoc and small cleanups

This also renames underscoreName to predicateFunctionName as it's only
used in one place. This is consistent with the other CellClassNames
members which describe their use, not their formatting