Expose the location that a file tree will generate its contents into to the structure visitor. Use this to implement mapping a file collection to an Ant structure by visiting the file collection structure and remove the special case implementation.
Do not write the source paths for a `CopySpec` multiple times to the instant execution cache. Previously, these were written once when the `CopySpec` was serialized and once when the associated input property spec was serialized.
This commit adds some special case handling for this case. It also preserves the identity of each `FileTree` and `FileCollection` instance for each task to enable short circuiting when the same file collections are referenced via multiple paths, such as in the `CopySpec` case.