TR: Fix keyword function type conversion and parsing

This PR adds two things:

  * Fixes how keyword functions are type-checked in several cases. I've added tests for most of the possible cases (the tests are stolen from Racket's base test suite) so it should be pretty comprehensive now.
  * Fixes how function types are parsed to match the documentation.

There's a point to discuss on the second point. Currently, the following syntax is accepted:
````
(Natural * #:some-kw Natural -> Natural)
````

but this directly contradicts the documentation, which claims that this is the correct syntax:
````
(#:some-kw Natural Natural * -> Natural)
````

The question is: should we accept only the documented syntax (implemented by this PR), only the contradictory syntax (and change the docs), or both?