Three metadata protocols: HasMetadataForDataset, HasMetadataForScan and NonScannableHasMetadataForScan