the main purpose of this is for the :auto-convert-map-keywords option,
but this also converts collection types to/from types that Pebble uses
natively... to be honest though, there's *probably* not much value in
that and we could likely just use something like prewalk to just
convert map keywords ... ? might be faster too?
much of this refactoring is built around the idea of absolutely NOT
wanting applications using this library to be required to explicitly
call some kind of "init" function before templates can be rendered.
however, for this library's (eventual) unit tests, we will want the
ability to reset the engine state (reset-engine! function), so a way
to add extensions to an arbitrary PebbleEngine object is needed