Fix CRDTs by moving away from tracking state locally

* Testing improvements for data types
    * Establish datatype bucket types for testing in buildbot (`crdt-setup`)
    * Extend datatype testing to include round trips to server
* Move away from state-based logic to pushing all operations to Riak
    * Remove `dirty_value/1` from all data types
    * Maps now embed records representing their nested types instead
      of raw values
* Throw exceptions when "dangerous" CRDT operations are attempted and
  no observed context has been supplied:
    * Removing a value from a set
    * Erasing a field in a map
    * Disabling a flag

I disagree with this approach generally, the user should be able to see the raw value(s) without wrapping and unwrapping them each time. 

Nit: if you're going to do `foldl` and `++`, just use `foldr` and `|` instead.