Rework smartCopy

If we are doing nonsense like composing algorithms in memory, checking for
a NULL parent is not a viable way to detect when smartCopy has returned a
loose transform. This is because root transforms created through
algorithmCore or whatever also have NULL parents, but actually they will
be deleted via QSharedPointers, so adding them to a parent chain is
dangerous, and they can show up as child transforms if we say attach them
as children of a stream or distribute transform as part of a
parallelization scheme.

So, instead we add an output parameter to smartCopy indicating if the
returned pointer is a newly allocated transform, that is not already set
up to be deleted.