Enable stumble simulation

This adds preliminary hooks to enable simulated stumbles.

Overview:

There's a new developer option checkbox to enable simulation mode.

When this is enabled, toggling the stumbler to 'on' will generate a context wrapper (SimulationContext) around the application context that is used by the GPSScanner, WifiScanner and CellScanner.

The SimulationContext provides hooks to emit CellInfo and ScanResult to spoof cell scans and wifi scans.  The GPS scans are spoofed using a MOCK_LOCATION permission and we inject new locations into the LocationManager.

Currently, the spoofed locations will start from your last known 'real' GPS location and will simply increment north west by roughly 5 m every second.  Cell tower and wifi spoofing is hardcoded to simply use a single tower and 2 wifi BSSIDs.

The next step to getting this into something more useful will be to land #1255 and then have the ability to read back the JSON logs and replay a full stumble.

I've renamed a few of the Context instances so that it's clear that we're actually passing the main application context. This is important as that context is wrapped by SimulationContext in the case of a simulation.

The AsyncUploader also checks the simulation preference to see if uploads should be real or just be mocked out with a spoofed HTTP 200 success.

Along the way, I've upgraded robolectric to use revision 2.4.
we don't normal check if Prefs are null, it is an assumed precondition that the app created this on startup. You could do a Prefs.createGlobalInstance(appCtx) here if you are concerned. Also, this code could be wrapped in a build-time check for debugging build.