allow user to specify the lua metatable for a Terra value by setting
MyType.metamethods.__luametatable
ensure cwrapperpm is initialized to NULL.
prevent name conflicts with C namespace by prefixing LLVM symbols with $
handle the naming and use of anonymous C structs better in the wrapper.
fix compile errors in cuda runtime, turn off spurious output
fix cwrapper so that we don't rely on how clang translates type names into LLVM.
instead we place the types in a C function with a know name and extract the llvm type
by looking at the equivalent type in the generated LLVM function.
prep for changing multiple return values.
structs always require field names now.
the function tuple(arg1,...argN) constructs a struct with names _0 ... _N
and has a __cast behavior to match it to any type. {2,3} construct tuples.
{ a = 4, b = 5} construct a new struct type, that can cast to any struct containing a subset of the named fields
{a = 4, 5} is now invalid.
{1,2} constructs a tuple rather than make a new type.
put line coverage generator in a single place in terralib.lua
fix bug that was giving all type names in llvm "nil"
changing behavior of multiple returns. They now implicity create an anonymous structs (tuples).
an upcomming commit will allow assignment to expand a tuple.
casting from an anonymous struct (tuple or named) to a named struct
must now be done explicitly:
  var a = A {1} --ok
  var a : A = {1} --not allow, implicit cast
This change was made because previously the empty struct {}
was convertible to any other struct type, which could lead to subtle errors.
defvar desugar's to an assignment with allocvar:
var a,b = 3,4
becomes:
allocvar(a),allocvar(b) = 3,4
in the typed ast.
this should make it easier to desugar pattern matching on structs.
adding pattern matching for tuples
var a,b,c = 1,{2,3}
adding unpackstruct macro
var r = {1,2}
return twoarguments(unpackstruct(r))
remove tcwrapper reliance on types being in the global table.
updating coverage for new return argument behavior
changing formal parameter list to mirror other lists,
multiple symbols can be spliced in place even if it is not the last element of the list.
call terra functions from lua no longer automatically unpacks multiple return values.
instead you can call terralib.unpackstruct in lua:

terra foo() return 1,2 end
local a = foo() --a cdata struct of 1,2
local b,c = terralib.unpackstruct(foo()) --1, 2
make sizeof/terralib.sizeof and unpackstruct/terralib.unpackstruct
the same object. Each has different behavior when run as a macro vs. directly from Lua code.
fix evaluation of false in escape