Refactor completion handling a bit.

Refactor completion handling into `HootRequest`, and call that completion handling in `bindListener()` when the request is complete. This allows standardization of completion handling throughout all mechanisms of having the listener called when done. Otherwise, the listener's `onRequestCompleted()` callback is never called in the `bindListener()` case after being unbound when the request completes.