Allow functions to use type annotations to define the function/method types. This feature is already available in `functools.singledispatch` and it would be nice if we can do the same for multi-dispatch.