Clean up internal workspace caches within an Algorithm object
The algorithm object should only store a reference to any input workspaces if it is told not to store in the ADS and then it should only have a single reference by the time execution has completed. Here we clean out internal caches of workspace pointers that were keeping workspaces alive if an algorithm object was not removed immediately, e.g. in the AlgorithmManager. The AlgorithmProxy used ensure this happend after algorithm execution finished but that no longer exists. Some workspace types require workspace destruction to release resources such as file locks, e.g file-backed MDWorkspaces, and keeping references to those workspaces complicates writing scripts a subsequent operation required a workspace to be deleted.