Better atom() generation, tests for timestamps in verbose formats.
Fix iso8601 timestamp encoding.

A `rem` should have been a `div`. Fix this.
Add a missing case for stringable_keys/1

Any key not matching the positive match list means we can't stringify the key.
Fix decoding of the value [{}] which jsx unfortunately still produces.

This solves problems with encoding/decoding of empty maps in JSON verbose mode.
Force that strings are always encoded as binaries.

We can't allow lists, since the list [8] and the string "\b" are the same. So we can't discriminate these changes, breaking isomorphism of the format.
Remove matching on structures [{_, _} | _]

The original idea was to use this structure to handle proplist-encoded maps. But unfortunately, this leads to problems. An array containing a timestamp object has the form [{atom(), TS} | _] which matches the above. Deep encoding of composite maps fails at this since we end up encoding timestamp as atoms and lots of errors occur.

By disallowing the format, we reclaim full support for the current QuickCheck model.

Closes #17
Reflect state of affairs: strings are binaries and maps are not proplists.
Fix all unit tests.

There are some different cases:

* "foo" is a list [102, 111, 111]
* Proplists are not allowed as maps. Remove these test cases
* Correct the escaping from keywords and symbols
* make sure all strings are actually given as binaries

Closes #16