rewrite codes, and add some options during creating hooks

introduce these classes
- Hook: use to carry options
- HookManager: base class for both 'after' and 'before'

some refine:
shorten 'funhook.base.before' to 'funhook.before'
similar shorten is applied to 'after', too.