Seems like you could simplify this by just allowing `opts` to be `undefined` if there are no options to pass. Calling `host.fire(eventName, facade, opts)` would then have the same effect as calling `host.fire(eventName, facade)`, and you could eliminate the `hasOpts` var and associated if statements.