Adds the starts of the explain code.
Adds a unittest for explain.
Pushes through tasks. They're now in the env_t.
Take an optarg for explain and return it in the Response.
Add unittest file.
Make tasks a little bit easier to handle.
Adds serialization of explain::task_t.

This means they now in theory can be sent over the network...
we just have to actually do so.
Convert enums in protocol.hpp to enum classes.
Threads explain through a number of layers.

They're now sent back in every read and write query if the results if
the explain global argument is set.
More work for moving tasks around.

This commit doesn't compile. The next step is to make it compile by
removing a lot of copying in the clustering layer.
Makes tasks copyable.

This is needed because we want to use them in query language responses
which we copy all over the place.
Steps toward pushing through the explains.
In theory explains now gets pushed through to shards.

Let's see if it actually works in practice.
Fix a couple of segfaults.
Adds a merge tasks method.
Finish tasks in tracer destructor.
First compiling commit of new explain system.
A few bug fixes to explain. It works for simple examples now.
Fixes serialization of event_t >.<
Change up where we render the traces.