Coerce map keys to strings
Accept floats rather than integers.
Only save listeners if handler succeeds.
Add a bunch of docstrings
Seems a little clearer this way