adapt __init__ methods of AST to common practice

despaghettify code: handling associative operators belongs to the parser, not to the AST.
This removes some potentially pyparsing-specific features from the AST.
Apparently pyparsing is neither an efficient, nor a readable approach to parsing.
decorate as property method op of AST classes
replace dump_dot methods with to_nx in AST classes

because converting to a networkx graph is much more useful than only dumping dot.
A dot representation can readily be derived using pydot or any other graphviz related package that networkx interfaces to.

In the worst case one can write 3 lines to convert the networkx graph to dot w/o using extra dependencies. This is still more succinct than the identical dump_dot methods that existed previously in AST classes.
add new function: ast.to_nx
rewrite ast.dump_dot to use to_nx
test AST conversion to networkx
rename AST classes, removing the prefix AST

because it is redundant, reduces readability and increases clutter.
Instead, import the ast module and access its classes with the syntax: ast.Node
This is cleaner and also more explicit.
Note that "from . import ast" will shadow the builtin ast module. This is not a real problem because it can always be imported with a different name, if the python ast module must also be imported in the same namespace. In addition, their coexistence has not been necessary anywhere in tulip until now.
simplify conditional script section

because the module is not designed to normally run as a script (w/o -m it will fail due to local imports) and so elaborate exception handling is not really needed there.
bugfix: DFA replaced by FiniteWordAutomaton
dump_dot now writes a file

(the previous version should have actually been called dumps_dot)
bugfix: unmask Exception in TypedDict

If y is not iterable and self.allowed_values[i] is a PowerSet, then the PowerSet raises an Exception, but that is masked by the "pass".
style
skip check in TypedDict if type is None

this allows relaxing somewhat the type checks. The state and edge attribute names are still checked, but the value not. It is a compromise to avoid the clumsy checks needed for symbolic attributes: too implicit.

It may be potentially better in the future to pull all the type checks into a method, to be run optionally if desired (and so avoid imposing constraints on the user, which is more pythonic, while still making the consistency checks available to be used).
add option for symbolic edge guards on automata

this is useful for non-deterministic automata.
(each edge of a deterministic automaton is guarded by a single valuation, so the explicit and symbolic representations of the guard occupy the same space).
add ltl2ba interface

based on PLY and returning a BA with symbolic edge guards.