Use JSON enum to help with type inference

This branch is suppose to speed up compile time by using an `enum` to describe the JSON.
I think you can handle this by making `JSONValue` implement `JSONDecodable`, which will work for more than just key retrieval.