009_build_and_store_resources_with_provenance

As a client
I can build and store a group of resources with provenance

* rename ArrayCollection to OrderedSetCollection

* clean-up the dependency on external UUID gem

* make a FactsBySubject model
  * add subject and facts related methods

* make a FactsWithProvenance model
  * add public build methods on it

* add validations on Fact::Collection << for Fact#complete?

* rename FactsBySubject to Resource

* rename FactsWithProvenance to ResourcesWithProvenance

* on Resource, enforce the presence of a subject and set it on the facts

* on Resource, enforce the presence of a provenance_subject and set it on the facts

* on ProvenanceResource, enforce the presence of a subject and set it on the facts

* rename provenance_fact_subject to provenance_subject

* change arguments for (Provenance)Resource to an options hash

* remove the ResourcesWithProvenance

* change arguments for (Provenance)Fact to an options hash

* add a store method on Graph
  * that will store a (Provenance)Resource instance
  * this will now set the time_stamps (enforcing the strictly monotic order)

009_build_and_store_resources_with_provenance

As a client
I can build and store a group of resources with provenance

* rename ArrayCollection to OrderedSetCollection

* clean-up the dependency on external UUID gem

* make a FactsBySubject model
  * add subject and facts related methods

* make a FactsWithProvenance model
  * add public build methods on it

* add validations on Fact::Collection << for Fact#complete?

* rename FactsBySubject to Resource

* rename FactsWithProvenance to ResourcesWithProvenance

* on Resource, enforce the presence of a subject and set it on the facts

* on Resource, enforce the presence of a provenance_subject and set it on the facts

* on ProvenanceResource, enforce the presence of a subject and set it on the facts

* rename provenance_fact_subject to provenance_subject

* change arguments for (Provenance)Resource to an options hash

* remove the ResourcesWithProvenance

* change arguments for (Provenance)Fact to an options hash

* add a store method on Graph
  * that will store a (Provenance)Resource instance
  * this will now set the time_stamps (enforcing the strictly monotic order)

* change the methods << that change values to add!()

* allow setting the subject and provenance_subject of a fact with set_once
  (a soft form of immutable behavior that does not require the creation of
   new objects (garbage collection cost) and may clean up the way too complex
   check_or_set_subject_and_provenance behavior in Resource)

Add some technical tasks to story 009
Add some technical tasks to story 009
