Try to catch unhandled exceptions in Android JS execution

Similar to the iOS changes, this wraps any call through to the JS runtime in a try...catch block and will rethrow any JS exceptions as native Android RuntimeExceptions.

This makes the Android app fail fast if there's an unhandled javascript exception.

It's implemented slightly differently to the iOS version. When it catches an exception it calls a new `rethrowException` method on the `JSContainer`, which throws a `RuntimeException` on the UI thread.