refactor prefix parser
refactor prefix parser

`Nodes` is made available and includes the buffer-evaluating flatteners, so that subclasses don't have to duplicate them. `DebugNodes` is a descriptive name. `BDDNodes` need only be used for flattening to a BDD, and not subclassed (because the buffer evaluation has been moved to `Nodes`, allowing for shallower class hierarchies).

Parser and lexer are renamed, since we are in a clean namespace now (compared to when they were originally written in `bitvector`).

BUG: `MemoryNodes.Binary.flatten` was called with an instance of a subclass of its parent. Just rewrite the flattener (simple and explicit).

BUG: `BDDNodes.Buffer.flatten` did not cherry-pick the `mem` argument.
Instead, it did not forward `arg` and `kw`, which is a flaw.  Now `arg`
and `kw` are forwarded, and `mem` is overridden. This allows for nested
memory buffers. The default `mem=None` ensures that `Buffer.flatten`
works also when the top AST node is a buffer (so that the user need not
pass `mem` as an argument).

johnyf/openpromela