* feat: allow upnp to recover from errors
* feat: allow natpmp to recover from errors
* chore: housekeeping
* code review: explicitly list all states to start discovering from
* fix: recover from failed UPnP discovery
* refactor: remove `UpnpState::Failed`
* refactor: rename state enum type as tr_port_forwarding_state
* chore: use snake_case for tr_shared struct fields
* refactor: replace tr_shared with tr_port_forwarding
* refactor: make tr_natpmp_state an enum class
* refactor: uniform naming for port-forwarding module
* refactor: move output-only parameters in tr_natpmp::pulse() to return struct
* fix: use a nullptr multicastif if bindaddr is empty
* chore: use PascalCase for enum class values
* chore: clean up port-forwarding #includes
* chore: remove unused tr_port_forwarding::peerPort()