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