Reduce dependencies between lifetime and gc

This implements the other refactorings proposed in https://github.com/D-Programming-Language/druntime/pull/864
- move stored TypeInfo to the end of the allocated memory block of arrays to be consistent with structs
- only pass a single additional flag to the GC to be returned for finalizer callbacks. The logic for selecting the appropriate destructor is kept inside lifetime.d
- some small optimizations with respect to not evaluating ti.next multiple times.