new test cases, and fix one bug

- test non-return function
- check hook execution ordering

- we shouldn't pass 'ret' to Hook.before