Refactor (array_)builder to write directly to document format.
This improves performance greatly though there are some side effects:
- elements are in the order of insertion
- array indices can no longer be explicitly specified
Simplify some tuple deserialise() function signatures
Remove array construction from ranges of documents
Refactor set.hpp to be the counterpart to get.hpp
serialise() can be overloaded and act like deserialise() for custom type
(de)serialisation
Remove restrictions on setting types in basic_element.
This enables serialisation of user types and also no longer throws when
a type doesn't match its element_type, as long as it has a serialise()
overload.
set_visitor will still try to convert the input type to one of the
predefined if possible.
Also add serialise() overloads for (array_)builder & document_set