Fix crash in TDJSViewCompiler

The compiled function objects were getting GC'd, after which calling them would crash.
Don't do reachability checks on replication to a local touchdb: URL.

Fixes #228
Make sure views compiled from JS get rebuilt if the map/reduce fn changes

…Although currently this only takes effect next time the app is launched, i.e.
it isn't watching for edits of the design docs while running.

Also moved the code that triggers the compilation out of TDRouter and into
TD_View and TD_Database.
Fixed compile errors reported by Xcode 4.6

Make sure to run "git submodule sync" after pulling this commit.
Don't stop a push replication if the _revs_diff call gets an error

Took out the -stop call. The remaining call to -revisionFailed will ensure that the
pull is retried later. And in the case being reported, where the call fails due to being
canceled when going offline, the replication will continue when it goes back online.
Fixes #233.
Fix for TDMultipartDownloader in case NSURLConnection gets two responses

It's possible in rare cases for the didReceiveResponse: delegate method to be called twice.
Handle this correctly by creating a new _reader within that call.
Thanks to @kjots, @chaisehocking, @drekka for tracking this down!
Speculatively fixes #236.
Push replicator now encodes non-string filter params as JSON.

I'm not sure whether such parameters are allowed, but JSON encoding seems like the reasonable
way to send them to the remote _changes feed (as opposed to calling ObjC -description on them,
which the code used to do...)
Potential fix for issue #239.
Change BrowserID login path to /db/_browserid, for Sync Gateway.
PUT with new_edits=false should return JSON body like regular PUT
Fix: Pull checkpoints weren't getting restored correctly

TDPuller was saving its checkpoints to the remote JSON doc as numbers but
they were then read back and cast to string, causing the comparison to
fail. This meant the puller would start over from the beginning every time.

I also added some more logging.
Fix: "?" in doc ID wasn't being escaped

TDEscapeID wasn't escaping "?". This led to the replicator constructing
invalid URLs for docs whose ID contains "?", which meant they'd never get
replicated.
Fix: Puller would lose checkpoint if first doc couldn't be pulled

If the first new revision received by the puller fails to be read or
written, the last-sequence ID won't advance. But the puller was instead
getting a null sequence ID instead of the checkpointed one, and trying
to save that, which deleted the checkpoint. So the next pull would start
over from the beginning.
Bumped version to 1.011 (or, 1.02 candidate 1)
Rename "BrowserID" --> "Persona"

Note that this invalidates all saved persistent replications that used Persona/BrowserID auth,
because the property in the replication doc was renamed too.
It also changes the server endpoint that the replicator hits to log in from /db/browserid to /db/persona.

(This is equivalent to commit 111859c from CouchbaseLite, although it's not a direct cherry-pick. I had to make the same changes manually because too many things have been renamed for a merge to work.)
Better logging if change tracker fails HTTP auth

If TDSocketChangeTracker gets a 401 or 407 and can't find a credential, or the credential is rejected,
it now logs a message of the form
    TDSocketChangeTracker[...]: HTTP auth failed; sent Authorization: %@  ;  got WWW-Authenticate: %@
showing the Authorization header it sent (if any, else null) and the WWW-Authenticate response header.
These headers are also returned in the NSError as keys "HTTPAuthorization" and "HTTPAuthenticateHeader"
(although this is of limited use since this info won't make it all the way up to the public replication API, yet.)
This should help in diagnosing issue #242.
Make returned error strings more compatible with CouchDB's

These strings are in JSON "error" properties in error responses and in individual items
of a _bulk_docs response.
Make TDPusher more careful abut bumping the checkpoint

It now works similarly to the puller, using an NSIndexSet to keep track of which sequences haven't
yet been uploaded, and only advancing the checkpoint to just before the first sequence in the set.
This will fix possible edge cases/race conditions where the checkpoint may have been advanced too
optimistically, causing a doc that failed to be pushed once to never be retried. (Fixes #246)
Basic-auth improvements

* If a TDRemoteRequest gets an auth challenge and finds a new credential based on the Realm string,
  it now remembers that in its authorizer, and the replicator will pick it up and use that as its
  authorizer from then on. This should help pick up credentials registered with non-empty realms.
* TDRemoteRequest now tries the 'proposed' credential, if there is one, on its first pass through
  the auth challenge handler.
* Added more logging about the auth flow, for future debugging needs.

I am not sure if these will fix issue #242 but they should help.
Some correctness tweaks to TDSocketChangeTracker

A futile attempt to address truncated feeds (#241); but I think these are
good changes to make anyway even if they didn't help that.
Fix "removePending: sequence %lld not in set" warnings

Manually copied over from CouchbaseLite commit 8ee5c3d