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 believe we don't add the close hook if there's not already a context as this implies the event bus is being run embedded, so there's no point adding a close hook as there's no verticle to be undeployed.