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
That argument makes sense to me, but providing a default value function was intended to move much of our compiler differentiation between types into module code.  By forcing extern types to create a _defaultOf function (albeit one that merely leaves the type uninitialized), we make the special case code for extern types something that the user can manipulate.  If we get a method to determine if a provided type is an extern type, then even this compiler code can be replaced by a simple module function:
inline proc _defaultOf(type t) where t.isExtern() {
  var res: t = noinit;
  return res;
}