more improvements to FunctionType

added optional parameter constructors
changed ArgumentException to NotImplementedException