Split Provenance backend in two layers
First layer (temporarily called ProvenanceBackend) is responsable of
handling read/write caches and it should ideally be db absnostic (not
yet though).
Second layer is responsable of all db interaction. In revisions to come
it will be further refactored into sevel workers to guarantee no
collitions when writing to the DB.