Fix: store data as list instead of tuple for JSON
Split tokenizer steps into separate functions
Provide tokens unsuitable for n-gram generation

Dependant on development version of the infer library.
Move tokenizer related functions to a new module
Log misclassification reports to a separate file

These reports can later be used to re-train a classifier that has been
loaded from a pickled file with new (misclassified) instances.
Update classifier after loading from pickled file

Use the misclassification examples to update the classifier after
loading from the pickled file. The pickled file remains unchanged after
initial training, therefore needs to be updated if the classifier is
ever reloaded from disk.
Add: online learning of misclassification reports

As soon as we get a misclassification report, update the classifier so
that future results will benefit from the additional training instance.
This closes gh-46.
Normalize text in case it contains Unicode
Replace newlines as part of text normalization
Alert user to invalid misclassification reports
Fix: check that the user enters a nonempty query