correct and improve SchemaFact.add/retract and SchemaEntityBuilder

The following should be invalid in Datomic
```clojure
[:db/add id :attr [a b c]]
```
However, this was previously permitted. This is now eliminated.

The typeclass `Attribute2FactWriter` is introduced to implement this, and it also has the bonus of being a more efficient implementation over `Attribute2PartialAddEntityWriter`.

Also, expand the methods on SchemaEntityBuilder:
```scala
+= (attr, val)
+?= (attr, optVal)
++= (manyAttr, coll)
++= partialEntity
```