get_raw always returns Typelib Types

this makes the usage more straight forward than
returning ruby types for simple TypelibTypes like
NumericType, EnumType, ...
add instance method __typelib_parent to Typelib Types
ruby: implement a more flexible way to select ruby-side customizations

This implements a proper registration class for all customizations
(specializations and convertions). The typenames can now be matched
by name, basename for arrays and containers (referred to with bla[] and
bla<>) and finally by regexp.
ruby: remove annoying verbose output in test
ruby: use a proper logger to issue warnings
ruby: silence expected warnings in tests
ruby: cleanup and improve handling of invalidation during container modification
ruby: implement a path API to access fields or set of fields in a type
ruby: properly invalidate containers, when needed, in Typelib.copy
ruby: properly set string encodings when converting to Ruby
ruby: fix ContainerType#raw_each

It was still converting base types to ruby before yielding them
ruby: guard some methods against invalidation
ruby: the do_get and typelib_get_field methods always return a typelib value now
ruby: do not override existing values in @elements in #raw_each
ruby: better fix for #raw_each
ruby: refactor the invalidation handling code to make it generic

It was specific to the copy operation so far
ruby: fix Accessor.find_in_type

The traversal was stopped whenever a matching element was found. This
was causing e.g.

  Accessor.find_in_type(/std/vector</std/vector</double>>) { |t| t <= ContainerType }

to only access the first vector and not its elements, which is
obviously not the desired behaviour
ruby: sort the paths by size in Accessor.find_in_type

This allows to access the shallowest elements first
ruby: handle the fact that some elements in #handle_container_invalidation might be deleted

When applied on a container of a complex type, which contains other
containers, it is possible that the toplevel container deleted
some elements. These elements should therefore be ignored.

This is done in two places. #handle_container_invalidation ignores
already-invalidated elements while Typelib.handle_invalidation makes
sure that we process the (in)validation of the toplevel elements
first
ruby: in #==, no need to convert self to ruby twice