Systematically updates the SparseTensorRuntime to properly distinguish tensor-dimensions from storage-levels (and their associated ranks, shapes, sizes, indices, etc). With a few exceptions which are noted in the code, this ensures the runtime has all the semantic changes necessary to support non-permutations.
(Whereas operationally, since we're still using std::vector<uing64_t> to represent the mappings, there's no way to pass in any interesting non-permutations. Changing the representation to std::function will be done in a separate differential.)
Depends On D137680
This is a nice forward looking comment!