Circular reference detection

A basic way of avoiding stack overflows with circular references in a
type hierarchy. Looks a bit messy but I have a feeling it can be
refactored into something nicer. Related to #20
For what does we need to push the targettype here? Is it necessary? The unittests are "green" without this line!This would save some lines of code:
typeTracker = typeTracker ?? new new HashStack<Type>();