Issue #3620845: Add the special page resource base class
MyrestSpecialPageResourceBase answers with the page a site names by role rather than by ID. It is a subclass of MyrestEntityDetailResourceBase rather than a class of its own, because a special page is a detail endpoint whose entity comes from configuration instead of from the path, and the two must not drift apart in how they translate, render, count and build breadcrumbs.
A subclass declares the role in its plugin definition, under the myrest_special_page key every resource of this module already carries, and nothing else.
A role nobody filled in answers 404 with the error envelope naming the role - not a 500, which would say the module is broken, and not an empty 200, which would say the page exists and is blank. The caller gets one answer for an unfilled role, a node that is gone and a node it may not read; the log keeps them apart, and an unfilled role is logged as information rather than as a warning, because a site without a blog is a site rather than a defect.
The IDs are read through the configuration factory, so a settings.php may point a role at a local node while the exported configuration stays the production one. The configuration is a cacheable dependency of the answer, so sending a role to another node invalidates it.
A special page is a node, and this commit writes that decision down on the interface, on the base class and in the README rather than leaving it to be rediscovered: every role is a page, and the whole of the assumption is MyrestSpecialPages::getPath() and specialPageEntity() here.
Closes #3620845