Pushed down the timestamp checking of the fact metadata table. Changed
the isolation level of replace-facts! to ensure there are no
silent write/write failures when there are two replace-facts! commands
running concurrently for the same node. In that scenario, a potentially
older set of facts could overwrite a newer set of facts. Added a test
with an example of that scenario to ensure it's covered.

Moved the transaction for replace-facts! up to command.clj as you can't
change the transaction isolation of an already running transaction.
Fixed a bug when replacing facts has only new facts (no existing facts changed)
caused an NPE, also added a test where no facts were changed
Moved the concurrent fact updating test up a level to the command tests.
This is needed now that the repeatable read isolation happens at a higher level
(in the command execution).