FactsBySubject added; in Fact.new, subject is optional

* during the build phase, subject can be empty
* subject can be auto generated upon store
* alls facts in a facts_by_subject will have their subject
  overwritten by the subject of the FactsBySubject
Raise ArgumentErrori for nil predicate or object
Helpers::OrderedSetCollection#<< returns self for chaining