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. 

Better to use c++11 way of locking:
'''
{
    std::lock_guard<std::mutex> lock(m_mutex);
    m_tileStore[_tile.getID()] = tileData;
}

A good description on why? https://geidav.wordpress.com/2014/01/09/mutex-lock-guards-in-c11/