Refactor FunctionType to contain a Signature object