Create some reusable utility codes
Allow type functions to accept deferred input type arguments
Use numba typesystem to define some llvm types