Adding hooked rules for grammars.
Dealing with parameterized rules for hooking.
Testing parameterized rules. -unittest pass.
Merge branch 'hooked-rules'

This branch transforms any rule in a grammar into a 'hooked' rule with two hooks: beforeXXX and afterXXX,
XXX being the rule names.

Thus

```
Test:
    A <- 'a'
    B <- 'b'
```

will have static members Test.beforeA, Test.afterA, Test.beforeB, Test.afterB.

These hooks will be call before and after their parent rule. They default to 'fail' and thus by default
do not affect the parse results. They can be dynamically linked to another parser:

```
Test.beforeA = &literal!"b";
Test.afterA = &literal!"c";
```

makes Test.A behaves as if its definition was

```
Test:
    A <- 'b' 'a' 'c'
    B <- 'b'
```

The hooks are mainly interesting to extend a big grammar dynamically.

If you need to 'kill' a freshly assigned hook, just assign `&fail` to it: it will be skipped while parsing.