classier Ops

Op stores "symbols", used for equivalence
between an Op (e.g. Ternop('<', 'where')
and a config string (e.g. '< where').

AST has semantic `edges`, which come from the symbols of an operator.