WIP: Precompute metadata and stop subclassing hash

This is my WIP implementation of our current plan from #1231.  Still to do:

- [ ] Deprecate `:describes` key, either here or in 2.99
- [ ] Deprecate `:example_group_block` key, either here or in 2.99
- [ ] Benchmark the perf of this vs the old lazily computed way
- [ ] There are some further metadata improvements I have in mind but I may do it in another PR

For whoever reviews this: I spent a lot of work trying to put these commits into a logical ordering where each is self-contained, so it may be easier to review commit by commit (see 124e47c for example -- the commit message contains a good bit of info).