Rewrite report.py to use json files

Replaces the awful directory structures
Refactor to remove extra logic

Makes it more simple by leveraging features I built in earlier.
Override parent class function for efficiency

The base class's set_key_list is really just a loop calling set_key.
This makes the changes one large session and merge
transaction as opposed to many separate ones
Add a plugin which targets numeric responses

This plugin penalizes messages with only numbers
Fix inheritence error and return value

It shouldn't inherit from BaseWrapper, but merely object.
It should return None instead of 0.5 so it will have no effect on the average.
Add a nonsense filter

Scrubs messages with no words which appear in the database.
Remove debuggin info
Only don't train on control data but do test on it
Ignore None scores

Now plugins can neglect to return any spam score.
Add nonsense filter to the setup.py
Ignore auto generated files
Remove debugging data

Forgot this.
Remove timing data
Cleanup - old timing data, old print statements
Rewrite config system with plugin support

* Plugins now have tuneable parameters with the new json config files
Allow for the case where no plugin returns a score
Add a tag system

Prevents different fields like 'description' and 'user_agent' from conflicting
Add tags to the backend

Tags are usefule for differentiating between different fields such as
'description' and 'user_agent'.
A script for analyzing the difference between runs
Make tag and key be a composite primary key