defineRule and undefineRule

* Documented `Grammar.defineRule` and updated it to return `true` if the `Rule` was added to the `Grammar`
* Added `Grammar.undefineRule` to support removing a `Rule` from a `Grammar`. This method can be used by grammar transformation algorithms prior to AST construction.