Peer management API (#1252)
Formalize the notion of a "peer" (commissioned node on a shared fabric) and restructures logic for dealing with peers:
- ControllerCommissioner handles commissioning. It comprises code extracted from MatterController.
- The previous "ControllerCommissioner" class is now "ControllerCommissioningFlow" and still performs the actual commissioning steps.
- PeerSet manages operational peers and also consists primarily of code formerly housed in MatterController.
- PeerAddress is a fabric index/node ID tuple for addressing peers. Other components that previously worked with only a single fabric or took fabric+node parameters now use this for identifying peers.
- OperationalPeer is the record managed by PeerSet that describes operational information for a specific PeerAddress.
I created these components in packages/protocol/src/peer and moved ControllerDiscovery there as well.
Co-authored-by: Ingo Fischer <github@fischer-ka.de>