Added cloning to database model and methods needed to keep it up to date while the migration operations are processed.

Why wouldn't we always want the cloneCache available to any clone operation? Seems like something that should be assumed to be available and passed down to ensure any child-Clone action is using the same cache.  Perhaps a better name of cloneContext?