allow `spec.lexyacc.Parser` to accept different AST and lexer

so that it can be subclassed and provided with a modified AST and a different lexer.
handle different reserved words that map to same operator in yacc

because the lexer is not the right place for this: it causes multiple token definitions (which fortunately show up in the token `list` since it is not a `set` and are reposted as `ply` warnings).
rm comment and newline lexer rules from token list

they are lexer rules, but they are *not* token rules, since they do not produce tokens. So they should be invisible to yacc (thus removed from the token list), because otherwise it warns about unused tokens.

cf. https://groups.google.com/forum/#!msg/ply-hack/g0aPM7pEFoo/LBxTmx1A2lkJ

and: http://www.dabeaz.com/ply/ply.html#ply_nn4
where it becomes clear that these are functions (lowercase) that do not correspond to tokens (no capitalization).

introduced as a "bug fix" in:
    0e5ae0d056bb60e37cb459e63c3a92d90358e2e3
pep8
rewrite `spec.ast.Operator` to support any arty

and:
- reduce code duplication in `Unary`, `Binary`
- increase code homogeneity for AST nodes
- simplify functions operating on syntax trees
- implement recursive `__str__` with optional `depth` arg for limiting depth viewed
- by implementing `__str__`, a human-readable infix flattening is available even when `flatten` is overridden
- use `str.format` in `__repr__` and `__str__` for readability
- use `str.join` in `Operator.flatten` for efficiency and generality
update `spec` and its tests to new `ast.Operator`
load `json` in `slugs` interface and update its tests

rm `jtlv` test on var attributes of `nx.Digraph` strategy, because they are not used in `synth.strategy_to_mealy` and thus may be deprecated and removed in the future.

The `GRSpec` itself is used already, of course this prevents the interface from loading a strategy w/o knowing the spec. But that is not the currently the use case, and modifying to that is straightforward, if it is ever needed.
bugfix: use separate pipe for stderr of `slugs`

to avoid mixing the `json` output with messages
add production rule to yacc for negative numbers
raise Exception at first syntax error

because otherwise the syntax errors can go unnoticed, causing great loss of time and frustration.
assert is a statement, not a function
import from package instead of `.`, to enable running as script