Notice that it is nondeterministic that return happens first
or the `print` call happens first. (because they are happening in different threads)
user> (def a (agent 0))
=> #'user/a
user> a
=> #agent[{:status :ready, :val 0} 0x591e4e8e]
user> (add-watch a :key (fn [k r os ns] (print k r os ns)))
=> #agent[{:status :ready, :val 0} 0x591e4e8e]
user> (send a inc)
=> #agent[{:status :ready, :val 1} 0x591e4e8e]
:key #agent[{:status :ready, :val 1} 0x591e4e8e] 0 1
user> (send a inc)
:key #agent[{:status :ready, :val 2} 0x591e4e8e] 1 2
=> #agent[{:status :ready, :val 2} 0x591e4e8e]