First pass at implementing Agent

  * Need to stop leaning on LockingTransaction
I think the `^{:private true}` needs to come before the symbol.

```clojure
^{:private true} IAction
```