Travis CI added Perl 5.20 support (https://github.com/travis-ci/travis-ci/issues/2428), so start testing on it
Get rid of "push / values / keys on reference is experimental" warnings
Merge branch 'travis-perl_5_20'
Remove checking for obsolete configuration syntax because most users must have their configuration updated by now
Initialize GridFS download storage only when "mongodb_gridfs/downloads" section is enabled in the configuration (MongoDB might only be used for storing CoreNLP annotations)
Add support for setting CoreNLP annotations on/off on web UI
Show prettified CoreNLP annotation result JSON in the web UI
Add CSS class and make JSON textareas read-only
Do not show story annotation, story sentences annotation and story+sentences annotation separately because it slows up the page (and was used for testing helper subroutines anyway)
Add explanation about what index means what
Add (optional, disabled by default because slow) ability to render JSON nicely with "jquery-jsonview" (https://github.com/yesmeck/jquery-jsonview)
Simplify script
Move a call to mark_as_processed() to Gearman function because it's caller's business to write down that the story has been processed, not the helper subroutine's
Normalize variable names
Change the "story_is_annotatable_with_corenlp()" PostgreSQL subroutine in such a way that:

1) It will not check whether the story ID already exists in "processed_stories" (concluding that it must be already annotated). Story IDs in "processed_stories" might mean that the story was downloaded+extracted before the introduction of CoreNLP annotations, and that way old stories might be assumed to be annotated already.
2) It will check whether a story has at least one sentence in the "story_sentences" table (can't annotate much without sentences).
3) It will RAISE NOTICE with the reason why story's not to be annotated.
In mark_as_processed(), add an option to skip adding a story ID to "processed_stories" if it already exists there; this might happen if we're re-adding story IDs for stories that already have been processed differently (e.g. downloaded+extracted and not downloaded+extracted+annotated)
Add two helper subroutines:
* story_is_annotatable() -- checks whether story should be enqueued for annotation (has "media.annotatable_..." set properly, has some sentences, etc.)
* story_is_annotated() -- checks whether story has been (already) annotated (tests if it exists in MongoDB GridFS)
Use the new helper subroutines to check whether story is annotatable / annotated before doing anything else
Remove unused subroutine
Explain what will happen if story annotation already exists