各クラスがMarshalByRefObjectから継承するのをやめた

歴史的経緯により各クラスがMarshalByRefObjectを継承していたが、実はもういらないので継承しないようにした。
設定されたポートが全て開けなかった場合は適当なポートで接続待ち受けをするようにした

設定されたポートおよびデフォルトのポート(7144)にbindできなかった場合HTTP接続での操作もできなくなってしまうので、適当な開いてるポートでLAN内からの接続待ち受けができるようにした。
ポートの開放状態を接続待ち受けの開始・停止に合わせてリセットするようにした

PeerCast.IsFirewalledプロパティは一旦設定されると再起動するまで再設定されなかったが、待ち受けポートが変更された場合はポートが開いているか再度確認する必要がある。
そのためポートが閉じている状態でのStartListen、開いている状態でのStopListenが成功した場合にIsFirewalledをnullにリセットして再度ポートが開いているかの確認が行われるようにした。
接続待ち受け許可設定を変更したときもポート開放状況をリセットするようにした

接続待ち受けポートの追加・削除以外に待ち受けポートの設定変更でもリレー可能状況がかわるので、
WAN側へのリレー待ち受け設定を監視して変更があった場合はポート開放状況をリセットするようにした。
不要なリセットを避けるため、追加・削除と設定変更共にWAN側へのリレー待ち受け設定許可・不許可の状態をみてポート開放状況に変更がありうる場合のみリセットするようにした。