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...
});
I did want to discuss the above logic, as I changed it from the original. It seems we always want to add a closeHook here correct ? Before it only did it if the context wasn't created.