Reduce memory by having JobResult use custom data storage.

JobResult needs to be considered heavy data like JobContent and JobRequirements.
For that to happen it needs the ability to store the data as a raw char blob.

At the same time we use shared_array to remove a std::vector copy reducing the
amount of temporary memory to extract a serialized JobResult.