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. 

The android docs here are super unclear about this item: https://developer.android.com/guide/topics/manifest/activity-element.html#config

I think I'll just plug in an external display and see what happens.