refactorings for less GC information callbacks

These are most of the changes I had in mind in https://github.com/D-Programming-Language/druntime/pull/864.
One important change is that IMO if someone is calling destroy explicitely, he also takes responsibility to call GC.free if necessary.

What could be done, too, is to make TypeInfo storage a task of the GC. It might also be possible to combine rt_finalize_array2/rt_finalize_struct, if the stored typeinfo for an array is not the TypeInfo_Struct, but TypeInfo_Array.
I agree, it might be a little faster, especially in the case where the initializer is all zero.

There could be references from one array element to another that are dereferenced in the destructor, so it might be more correct to paste the initializer over already destroyed elements. If that is desirable, resetMemory could be mandatory for array operations anyway.