use Const(T) instead of Type{T} in inference
since Type{T} is not a singleton object (Type{T}.parameters[1] !== T)
we need to avoid assuming it can be used as a representation of a constant type
this change also allows deferring allocation of as many Type{T} objects
in the type cache, which is expected to be overall beneficial
(independent of fixing the aforementioned bug)
this necessitated a change to `associative_with_eltype` to allow
inference to prove that the object passed to DT is always the same
constant, and not just type-equal to it