Cache concrete types

Previously when invoking AutoRegister twice with a couple of thousand
concrete types and less than a thousand abstract types the concrete type
checking lambda was being invoked over five million times, taking a good
8 seconds to run under a profiler (and over a second without profiling).

Now it's being invoked less than fifty thousand times, with an overall
speedup of AutoRegister during profiling of over five times.