WIP: Add support for Python 3 annotations

Add support for dispatching on Python3 annotations, for example:

```python
@dispatch
def f(x: int, y: float):
    ...
```

This PR works on functions but isn't working completely on methods (yet!). I need to do some more work on getting the correct bound method...

Also, need to make sure this doesn't break Python 2. I believe it should be fine because the Python3-specific bits are wrapped in error trapping clauses.
@oubiwann what are your thoughts on the comments in this thread?