Make low-level cluster API connection-based rather than peer-based.

This should eliminate an entire class of bugs, including #2264. Many RethinkDB components have a procedure that is supposed to happen for every connection. For example, the `directory_read_manager_t` expects to receive one initialization message on each connection, followed by some number of update messages. However, the old low-level cluster API didn't explicitly expose the concept of a connection, so components would sometimes get confused when one connection was dropped and a new connection appeared for the same peer in a short period of time. This was the cause of #2264. These changes directly expose the concept of a connection, which should make those bugs impossible.

This commit also removes several layers of abstraction: `connectivity_service_t`, `message_service_t`, and `message_multiplexer_t`.
Add a new unit test for the connectivity layer. Fix two race conditions exposed by the unit tests. Fix several style issues.
Moved Datum and cJSON constructors outside of datum_t, into to_datum functions.
Removed useless datum_t default constructor.
Removed datum_t::UNITIALIZED state -- now that construction from cJSON and Datum objects is done outside.
Reduced the amount of creation of partially initialized datum_t values.

Added datum_object_builder_t to replace applicable uses of datum_ptr_t.
Made more places avoid partially initialized datum_t values.  Uncovered some horrible code.
Added and used datum_t::empty_object and empty_array.
Removed more use of partially initialized datum_t values.
Used std::move with datum_object_builder_t::finish appropriately.
Renamed finish to to_counted, Removed duplicate code in table_t::make_error_datum.
Added an important RSI comment telling me to check a thing...
Switched some raw std::vector usage to datum_array_builder_t, for the sake of size checking.
Made datum_array_builder_t::add use rcheck_array_size.
Removed more partly constructed datum_t usage.
Removed some more uses of partially constructed datums.
Made datum_t::drop_literals saner and not use datum_ptr_t while we are at it.
Removed last of datum_t(type_t) constructor users.
Removed now-unused datum_t(type_t) constructor.
Made pathspec unproject use datum_object_builder_t.