Generalize assets to any block_type but using

AssetKey and the metadata store
PLAT-204

@cpennington @doctoryes plz review (hopefully I'll fix the 2 typos I just noticed before you get to it)
I'm not yet sure. Point taken that args that don't need to be known by the constructor should go into fields. When the first system starts storing asset metadata for real, we need to re-visit this issue. The usage should shape the impl.