The UIDartState is now always owned by the isolate and always freed in
the isolate cleanup callback.
In the isolate shutdown callback, if the isolate being shut down is the
main isolate, the RuntimeController is informed which in turn notifies
the RuntimeHolder and thus the ApplicationControllerImpl. The
ApplicationControllerImpl tears down the whole Flutter application.
This fixes Fuchsia bug: MI4-328
This only operates correctly when the application is killed using the
Kill() method. Flutter applications on Fuchsia currently don't have any
way to shut themselves down, see:
https://github.com/flutter/flutter/issues/11934
Rather than receiving an ApplicationEnvironment, we now receive a namespace.
Once we have FIDL2, we can plumb the namespace all the way through to Dart.