Support Setting The Path Using an ENV Variable

This commit adds support for setting the root path (in
which to look for logs) using the 'OS_LOGANALYZE_ROOT_PATH'
environment variable.  If no such variable is present,
the old default path ('/srv/static/logs') is used.  The
path may still also be set using the `root_path` parameter
to the `application` function in wsgi.py

This is commit 1/4 in the series.
Introduce Generic Parsing/Filtering Framework

This commit introduces a new, generic framework for writing
log prettifiers.  LogMatchers parse or filter log line parts,
and are chained together to form full matchers.  The output of
these chains (a dict or nested dicts) is passed into an outputter,
which applies styles to the output.  Outputters delegate the actual
details of how a style is applied to stylers.  This way, a single
set of matchers and a single outputter can be used regardless of
the output medium.  Only the styler has to be differed.

The WSGI filter has been updated to use the new framework, and common
code between the passthrough filter and the html filter has been
pulled out into its own method which constructs the appropriate filter
chains.

The framework includes several filters which take arguments, and thus
the following query string parameters have been introduced:

- filter_sev: used to explicitly override the automatic severity
              detection.  When not specified, the filter checks
              whether a level has been specified in the query
              string (which acts like 'filter_sev=True').  If
              no level is present, it falls back on the
              filename-based detection.

- log_type: used to explicitly override the log file type detection.
            if not specified, the filename-based detection will be used.
            May be 'console', 'keystone', 'devstack', or 'oslo'

- no_match (default: false): explicitly disables matching/filtering functionality
                             for the passthrough filter, in case you
                             just want the log file directly for some
                             reason

- skip_raw (default: true): skip lines the 'raw' AMQP message lines,
                            when appropriate

- skip_source (multiple): skip lines whose 'source' matches the given
                          regular expression (note that spaces are
                          treated as '+' in the regexp, so use '\s'
                          for a space instead).

This is commit 2/4
Introduce Console Version, Move Common Code

This commit introduces support for using the common framework
from the previous post to output colored logs to the terminal.
The terminal version supports all the flags of the terminal version
(but some have slightly different names).  Since the terminal version
now exists, functionality from htmlify_stdin has been moved there.
Additionally, some common code between the terminal version and the
wSGI version has been moved from wsgi.py to common.py.

This is commit 3/4
Use JS to Up-Filter

Javascript is now used to move between severities
whose levels are equal to or greater than the current
severity.  This way, the entire document does not have
to be retramitted for these cases.  However, the code
is written in such a way that should JS not be available
or working, normal functionality will be used.

This is commit 4/4