Implements interfaces with subclasses instead of callbacks

This CL also fixes a couple of bugs in the DartController:
1. Ensures that IsolateData objects are deleted.
2. Allows the client to provide an unhandled exception callback so that failures in spawned isolates are exposed.

BUG=
R=asiva@google.com, jamesr@chromium.org

Review URL: https://codereview.chromium.org/810483002