Py2&3 port

Initial port is done. Tests are passing against 2.7 and 3.3 using six for all incompatibilities.
Yes, of course! I forgot to check if the dict was being mutated.