refactored super type looking up to allow
for stopping super types of derivation types being calculated
after parsing. This means that we don't need to consult the hierarchy
after parsing unless the super type flag is enabled. This means
we do less unneccesary work and also better abstraction of derivation class.