Protocol for adding swapping functionality.
(defprotocol ISwap (-swap! [o f] [o f a] [o f a b] [o f a b xs] "Swaps the value of o to be (apply f current-value-of-atom args)."))