Actual storage formats and their registration

A class named StorageFormat is finally introduced. This is a mapping from Protobuf extension fields and/or SQL identifiers to StorageDescription.

Since these are meant to be used in extensions (and plugins someday), invest a little effort in generics to keep from explicit casting.

There still aren't any new storage formats in main. But there are tests of the interesting cases:
* A format that adds fields to the per-store base (with its tree name, etc.).
* A format that was known once but isn't now. The AIS can still serialize and (where appropriate) the tree name is still protected against reuse.
* A format that adds SQL syntax to CREATE TABLE (etc.) to populate its fields.

These changes also uncovered two problems from earlier branches that went undetected:
* There was another bad use of SchemaFactory to make objects to merge rather than a standalone AIS.
* ALTER of a group index was requesting that the tree names be preserved but happened to call an API that didn't use to obey that. It does now.