Make type-construction more modular

See https://github.com/JuliaLang/julia/pull/8432#issuecomment-62536295