[WIP] implement nogc framework (warn/error about GC allocations)

This pull request adds the foundation for ```nogc``` related functionality.
It implements the basics to track if a function uses the GC in exactly the same way as ```@safe/@trusted/@system```.
On top of that it adds
* a ```-vgc``` switch which will print all implicit gc allocations, similar to ```-vtls```
* a ```-nogc``` switch which will make all implicit GC accesses in the current module an error

It currently does not help if functions like ```GC.malloc``` or other functions which allocate are called. In order to detect this a ```@nogc``` attribute is needed. This pull requests implements the basics for ```@nogc``` including inference in templated methods, but it does not implement the ```@nogc``` attribute in the parser. I'll leave that for another pull request.

The following known allocations are intentionally not handled:

* AssertExp
* CmpExp
* AssignExp: Calls _d_arrayassign
* Hidden function errors: Are already deprecated
* SwitchErrorStatement

All these cases only allocate by throwing exceptions
and disallowing them would impact user code a lot. In
order to really solve such issues we need some way to
throw exceptions without GC-allocation.

Also not handled are indirect calls to user-defined
functions which may allocate (calling postblits in
array assignment for example). As this commit does
not provide a way to mark a function as @nogc there's
no way to know if such functions actually allocate.

These indirect calls to user defined functions must
be revisited when a @nogc attribute is introduced.