Grand deserializer optimisation

More unit tests as needed
Collapse CDataScanner into CJSONScanner.
Use inlines where possible.
Use CF objects where possible.
Try very hard not to create intermediate objects (alloc is expensive)
Use a shared NSMutableData as a scratch pad.
Dedupe all strings.

Try to avoid allocs as much as possible by only creating new strings if we've not
already creating them before. Use a special CFMutDict where keys are hash of the
raw string data and value is the string.
Grand tidy-up.