AFJSONRequestOperation processes JSON before isFinished set

The issue here was the `AFJSONRequestOperation`'s `responseJSON` method computed its result lazily. Therefore, if called from multiple threads, things would blow up. The solution proposed in this PR is to process the JSON prior to marking the operation finished, on the thread on which the connection finishes. This means that callers of `responseJSON` are not burdened with processing the JSON, and that property can be a simply read-only property.

Long-term, we're going to need to replace our use of AFNetworking 1.0. We may do this next milestone as we move towards using background transfer for backup/sync.

PTAL @floatplane @DawnWright @charlesmchen 
Thanks for catching this. As discussed with @charlesmchen, I added these asserts to catch cases where we check for results prior to the operation actually being finished. This pattern is a bad one, IMO, and one we should re-evaluate since it's prone to race conditions, skipping over actual error checking, etc. @charlesmchen is evaluating this case to see why we're checking error prior to the operation being finished.