Added :around option to defrule

This patch makes `defrule` accept an additional `:around` option with syntax

```cl
(:AROUND ([&BOUNDS START [END]]) BODY)
```

`BODY` has to call `CALL-TRANSFORM` to invoke the primary transform of the rule.

This feature can be used to implement things like a stack of nested symbol tables (see new file `example-symbol-table.lisp`).

Remaining problems:

* documentation string is clunky
* not sure whether the patch interacts properly with the cache mechanism
* code duplication in `compile-rule`