Change EventBus register/unregister API to use registration object.

Let me know what you think. We can probably return a registration object even if it hasn't completed. I just thought it felt weird to have the following:

Registration reg = bus.registerHandler("foo", msg -> {}, ar -> {
  // Ok we're registered but we already returned a registration object...
});