message: net: make Ban/Unban/ClearBan functionality consistent
  Ban/Unban/ClearBan call uiInterface.BannedListChanged() as necessary
  Ban/Unban/ClearBan sync to disk if the operation is user-invoked
  Mark node for disconnection automatically when banning
  Lock cs_vNodes while setting disconnected
  Don't spin in a tight loop while setting disconnected
diff: @@ -462,20 +462,12 @@ UniValue setban(const UniValue& params, bool fHelp)
  absolute = params[3].get_bool();
  isSubnet ? CNode::Ban(subNet, BanReasonManuallyAdded, banTime, absolute) : CNode::Ban(netAddr, BanReasonManuallyAdded, banTime, absolute);
  -
  - //disconnect possible nodes
  - while(CNode *bannedNode = (isSubnet ? FindNode(subNet) : FindNode(netAddr)))
  - bannedNode->CloseSocketDisconnect();
  }
  else if(strCommand == "remove")
  {
  if (!( isSubnet ? CNode::Unban(subNet) : CNode::Unban(netAddr) ))
  throw JSONRPCError(RPC_MISC_ERROR, "Error: Unban failed");
  }
  -
  - DumpBanlist(); //store banlist to disk
  - uiInterface.BannedListChanged();
  -
  return NullUniValue;
  }
  @@ -532,8 +524,6 @@ UniValue clearbanned(const UniValue& params, bool fHelp)
  + HelpExampleRpc("clearbanned", ""));
  CNode::ClearBanned();
  - DumpBanlist(); //store banlist to disk
  - uiInterface.BannedListChanged();
  return NullUniValue;
  }
  