Use a finally tagless representation of a JSON AST

**This pull request is not meant to be merged yet!** Its purpose is to let you know that I'm experimenting with this approach.

Note that this pull request is based on my `scientific` branch.

The code is not yet tested and benchmarked!

The experiment here is to see if a finally tagless representation of a JSON AST can be encoded more efficiently than the current tagfull representation using `Value`.

I only expect to see a performance boost when GHC is able to SPECIALIZE the dictionaries away. 

The next step is to write some benchmarks.