Add a JSON engine

This one could use some serious code review and it's not critical to get it in before the next release,
so take you're time and see if there are things that we could do better in here.

One thing I could definitely use feedback on is what we should do with nulls in JSON. My feeling is
that nulls don't get included at all, but I haven't spent enough time with this format to know.