Allow to distinguish between relay and bridge descriptors.
So far, we did not distinguish between relay and bridge descriptors in the case of server descriptors and extra-info descriptors. This works just fine, because we tried hard to re-use existing keywords in relay descriptors for sanitized contents in bridge descriptors to facilitate parsing. However, some applications process both relay and bridge descriptors and need to add workarounds for distinguishing between the two. For example, they couldn't just read the contents of CollecTor's recent/ directory, because they wouldn't be able to know whether a ServerDescriptor instance was published by a relay or bridge. Or even worse, if an application expects a given directory to contain relay descriptors and that directory suddenly contains bridge descriptors, that application wouldn't notice. This change adds new interfaces to distinguish between relay and bridge descriptors. It still supports the existing two interfaces that don't make this distinction. Those two interfaces are not deprecated, because it's okay if an application does not care whether a descriptor was published by a relay or bridge. This change is in parts based on a discussion with atagar. Thanks! Implements #17000.