Use ES6 Map instead of plain object (if available)

Includes a miniature Map shim for non-ES6 environments! Tested on
Chromium.

And god was it a pain to get that shim working. I’ve now had a glimpse
at what’s so horrible about JS object-orientation.

Implements and closes #4.