Add initial TODO file
Rewrite rule syntax

Rules now define one signature; logical AND functionality is
implemented with rule chaining. Rules also contain an
additional k/v entry, opts, which define options specific to
a given rule (e.g. logic to implement chaining, ignoring
logging, etc).

Breaks rule processing into a separate function. A phase-local
context table is introduced to pass exec-scope data (such as
chaining flags and debugging info) into the rule processor.

Fixes a logic error that would stop all remaining rules in a
ruleset from processing if one rule was ignored.

Uses microsecond precision via FFI to track execution time.
Typo fix
Refactor regex and equals helper methods

Logic changes pave the way for further
refactoring of parse_collection.

Equals and regex_match methods now expect either a
primitive or a table to perform a match against.
If a table is received, recursive calls are made,
checking the table values.

operators.NOT_REGEX is also now implemented.
Refactor collection parser

Replace a linear search with a lookup table to parse the request.

Remodel the rule.var.opts table to accomodate the change.
Module cleanup

Localize private functions. Move log event target to the Nginx
log file, with ngx.WARN priority. Add module versioning.
Remove unneeded variable assignments
Implement PM operator

Efficient pattern match uses the Aho-Corasick
method of string searching. This requires the
lua-aho-corasick module made available by Cloudflare
(https://github.com/cloudflare/lua-aho-corasick)
Implement ruleset skipping

Adds a new item in the action lookup table: SKIPRS.

Push the whole ctx table into the action table. Skip and
chain flags are now set directly within the action table,
instead of logic bits in _process_rule.
Implement ACCEPT action
Implement SKIP action
Add 'all' key to function parse lookup table

'All' returns a single interger-indexed table containing both
keys and values of the target table.

Also fixes a bug with chaining logic.
Cache Aho-Corasick dictionary objects

Caches cdata objects at the module level. This increases performance
by over 100% (dictionary creation is expensive).

Also uses the C++ FFI library provided by aho-corasick-lua instead
of the pure module level.
Implement collection parse caching

Uses the ctx table to cache the results of _parse_collection. The
cache key is a concatenation of the rule var type, and the var opts
table values. If the var has no opts, the var type is used
exclusively.

Because _parse_collection can return nil, separate keys are created
in the ctx table to track cache status and parse results.
Add remaining rulesets
PM lookup bugfix
Add preliminary check to XSS ruleset
Refactor configuration options

Moves configuration to a sane location and provides a function
interface to set mode, whitelist, blacklist, active rulesets, and
ignored rules. Defaults to DEBUG mode; so active rule enforcement
requires manually setting the mode option to ACTIVE.
Repo cleanup

Removes unneeded example nginx config.

Removes unnecessary rule file prefixes.

Moves resty.cookie and libac.so to an includes directory. Updates
requires locations to remove extra dependancies. Hacks load_ac.lua
to serve libac.so from the includes directory.

Migrates logging mechanism to ngx.log. Additionally, removes debug
logging from fw.lua, and creates an identical module with debug
info.