Snapshot/Restore: Allow custom metadata to specify whether or not it sho...

...uld be in a snapshot

Before this change all persistent custom metadata is stored as part of snapshot. It requires us to remove repositories metadata later during recovery process. This change allows custom metadata to specify whether or not it should be stored as part of a snapshot.

  Fixes #7900
it seems like `MetaData.Custom` should be and abstract class