Better support for serializing algorithms in memory

 This branch gives us better support for serializing algorithms, without rigidly assuming that they can be reproduced from the string originally used to create them.

The main idea is to expand on Object::description, so that it produces a string that accurately reflects the state of the current object in memory, and also add support for bypassing LoadStore blocks, so that it is possible to force serialization to a single buffer.

When serialization to a single buffer is available, we can do things like serialize a transform in memory, send it to a different process, and the other process can then deserialize it and use the transform, without having to use the file system as an intermediary. Doing this in turn allows some simplification of the algorithm building done in AlgorithmCore::compare and AlgorithmCore::enroll, allowing us to treat multi and single process cases uniformly for the most part. 
Well this is a garbage line I kind of forgot about.

The problem with this in general is that prunedArguments actually isn't safe in a multi-threaded context at all, since the transform is potentially broken while its properties are reset (and concurrent calls don't even bear discussion). 

There is a much stronger argument for making an empty object of the same type in prunedArguments (although this is a hassle) than using a const cast.