BibIndex: refactoring

* Refactoring of BibIndex, implements inveniosoftware#1710:
  `task_run_core` in `bibindex_engine.py` is now easier to
  follow, and the decision of which records need to be reindexed to
  the tokenizers has been moved to the tokenizers

* Fixes bug: the command `bibindex -w [index name] -m [date range]`
  previously was updating the `last_updated` field of the index

* Moves many of the index specific special cases from
  `bibindex_engine.py` to the tokenizers
  (e.g. `if index_name == "author": # add special tokens`)

* Moves some utility functions from `bibindex_engine.py` to
  `bibindex_engine_utils.py`

* Solves inveniosoftware#1662
  (BibIndex: --reindex should not zero last_updated)

* Adds tests for bibindex CLI, for bibindex utils

Signed-off-by: Federico Poli <federico.poli@cern.ch>