Can we remove the "Move" project/group feature and replace it with a "Copy" feature

Problem

Related to #330304 (closed) we may want to have a top_level_namespace_id column to reliably identify the shard for any sharded record. Moving projects and subgroups to other groups will mean this column is not immutable but additionally it will be quite an expensive operation to perform as things may need to move shards. There will also likely be many caches that need invalidating as well as a primary database that stores shard locations that will need updating and cannot be done reliably in a single transaction as these things will cross several logical databases.

Solution

If we could have top_level_namespace_id as immutable a lot of problems will become a lot simpler. Moving projects and groups is probably the only barrier to this. We could just remove these features or change the way they work such that a moved project is actually just copied instead of moved. Thus it will change all the IDs of everything in the group. We can additionally archive (or delete) the original project. There are many tradeoffs but it's also possible that moving projects to different top level groups is not that important for users and they may be able to live with the copy approach.

If our Copy feature behaved similar to export then import it would mean a bunch of records are not copied across (like artifacts, container images and so on). We could expand to also implement copying for more things.