Remove all index manipulation from the API of collections

* FactCollection acts more as an "ordered set" but no direct
  access to the index (this was an Array specific features)
* this leaves open the implementation in other back-end storage
  systems with 1 ordered primary key (e.g. Hadoop, a postgresql
  table, Neo4j)
* to avoid leaking the index functions from ArrayCollection into
  the including class, index related method are presented as
  module methods
ArrayCollection also has << when no index is needed
Refactor Factories

* move Factories::ProvenanceFact::Collection.me to Factories::Fact::Collection.provenance_facts
Partial implementation of Fact::Collection#provenance_fact_subjects
Fact#provenance_fact_id => Fact#provenance_fact_subject

* is a result of transforming FactOrigin (that was 1 entry)
  to ProvenanceFact (that is multiple tuples for 1 logic
  provenance entry). The subject can be used for the different
  tuples of the provenance entry, but id is really unique per
  tuple.