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, TypeInfo_Array.