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.
Made datum_t::merge use datum_object_builder_t instead of datum_ptr_t.
Migrated datum_t::merge to datum_object_builder_t.