Cleanup and fix array shrinking

I made the discussed cleanups and added a few tests. That way I noticed that shrinking an array explicitely didn't call struct destructors.

- remove StructFinalizers, preallocate FinalizeError
- remove TypeInfo from gc.setAttr/setBits
- assumeSafeAppend now calls struct destructors, checks whether the array is really shrinked
- remove rt_ prefix from internal functions
- add tests
Sorry, I was looking at the commit where _d_arrayshrinktofit was introduced and there the corresponding function was still named shrinkTo. Didn't got that it was later renamed to assumeSafeAppend.