mv precedence def inside LTLParser class

to tidy things up, cf. pycparser.c_parser.CParser
mv token rules to Lexer class (new)

do not initialize a lexer in global scope. This design is tidier, also recommended by PLY doc.
tidy imports

because this clarifies from where each function originates.
rename LTLParser -> Parser

the import path serves as prefix.
build the parser once only, in Parser.__init__
create a PLY Parser in module spec.parser and cache it
add default loggers dedicated to lex, yacc, and parsing

for better organized logging. The default logger names are defined by string constants and a decorator used to keep the docstrings consistent.

Note that the logger names closely follow the __name__ convention.
The users can override the default loggers by passing logging.Logger objects of their own.
add build method to Lexer

with configurable logging and default logger for lexer generation.
pep8 and style
use PLY's outputdir option instead of moving the parse table
no parser.out anymore, instead increase logging output

by using lower logging level for the loggers in tulip.spec.plyparser dedicated to lex, yacc and the parser.
rename parsing_logger -> parser_logger

because it corresponds to the parser object generated by PLY.
add json for logging config and example using it