Performance optimisations for the RegisterResolver
Added CallableType object

This object is forked from the same logic formerly in the Func object to determine what type of callable we are dealing with.

It returns a constant value which allows us to cache the result easily, while also meaning we can use the same logic elsewhere.
Updated the Func object to be more performant