Honor session hooks

Fixes #1655 

TODO:

- [ ] ~~Add tests for `merge_hooks`~~
- [x] Add tests to ensure that Session hooks can be overridden by request hooks.
- [x] Fix logic so that there is no API braking change. Currently `merge_hooks` changes the behaviour of how hooks behave.