I added the ability to change default factory ids to help third party SPI developers. Suppose that there're two different third party modules (not developed by us) using the same factory id internally. A user cannot depend on these two modules at the same time, because there'll be a conflict in serialization. To be able to change default factory id registered by hooks allows users to resolve this issue.

Very first goal of the 3.0 branch was to present outside developers a flexible, pluggable, configurable SPI framework (although we are not heading into that direction anymore).