Fixes for record type typecode caching, and additional tests (attempt 2)

A continuation of the work/discussion from https://github.com/numba/numba/pull/879, using a dict to cache keys instead.
Hm, right. So we have:
1. ``typecode_fallback`` requests a new typecode for an arbitrary Python value; this implies creating a Numba type object (on the first dispatcher call); the typecode cache is then populated
2. matching of the typecode list in _dispatcherimpl.cpp fails, since the typecode is new (!)
3. we have to compile: compile_and_invoke() is called, it will invoke Dispatcher_Insert to register the new signature (which hopefully is the same typecode list as above)

Ideally, we would populate the typecode cache in 3 rather than in 1, since at this point we know both the argument values and the final typecodes. Am I mistaken?