Backport of functools.singledispatch from Python 3.4

WWW: https://github.com/jaraco/singledispatch
