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.
@mrocklin pragmatically, I'm all for the small change you suggest. I can add a ticket for that and work on it. 

I'm intrigued by @jlowin's comment... that would *definitely* be a great thing to explore and possibly implement. But it would be nice to start with the current change...