Change initialization to utilize module defined "_defaultOf" functions.

This is an initial commit, capable of being used but not as clean as I would like - ideally there will be no instances of PRIM_INIT remaining in the compiler when I have finished my work on this feature.  I have split the work into many pieces so that the code which logically goes together is for the most part in the same commit.  Details of the major thought process are in the third commit, "Adds compiler functionality for a module-defined _defaultOf function"

tested:
full /std with fifo
full /std with massivethreads (7 errors, same as master massivethreads that I could tell)
full /std with qthreads (but no hwloc, for some reason that wasn't building)
gasnet+fifo with examples
I have been interpreting FLAG_EXTERN to mean "we know nothing about this type".  The fact that we supply an assignment operator for externs is unfortunate, but necessary at least in the definition of assignment for records that contain extern fields.  An alternative to providing an assignment operator for extern types would be to special-case assignment of variables and fields of extern type and replace these assignments with moves internally.
Replacing assignment with a bitwise copy for extern types seems like we are not pretending to know too much about that type, but supplying a default value makes it seem like we are moving into that region.  A better design for using extern types and ensuring that they are properly initialized would be to provide a record wrapper and then call the initialization code from the record's default constructor.