Fixed up the parsing of complex function pointers.

Added some nasty test cases for function pointers as both arguments
and return types, without using a typedef to tame the complexity.

The Type representation cannot cover these prototypes / function-pointers
because the return-type is not primitive. The representation needs
to be expanded to handle arbitrary types as returns.