Stability and app lifecycle management fixes

Changes:
- Android and iOS now handle screen rotation correctly
- Fixes a race condition in the tile building process that caused frequent and aggravating crashes
- View is now scaled such that tiles span 256 x 256 screen pixels
- Reorganizes Android Java code to make the renderer a more self-contained module
- Fixes compiler warnings
- Updates version of jsoncpp (for bug fixes)
- Tracks all objects using GL handles in static lists and invalidates/rebuilds all these objects when Android destroys the GL context (currently this applies to ShaderPrograms and VboMeshes, this will also apply to textures when added)

Future work:
- iOS code needs to be modularized like the Android code to be more self-contained
- Scaling of the View needs to use 'logical pixels' on Android (otherwise tiles are tiny)
- Logging of GL errors is dumb right now, printing out the same message 60 times per second is the opposite of helpful
- There is a known fatal error related to curl that isn't solved here; the app will crash on Android after being paused for about 60 seconds; logs trace the crash to within curl
- There is a known fatal error related to libtess2 that isn't solved here; very rarely libtess2 will crash on an assert failure when building certain tiles. 

Should we also set "smallestScreenSize"? According to the documentation, this will affect if your app is launched on an external display.