Refactor networkstatus.parseALine() raise/return more sane values.
Refactor networkstatus.parseALine() raise/return more sane values.

There were some cases raised within the unittests where, when the IP
address had failed to parse, `networkstatus.parseALine()` would return
an `addr.PortList` and `None` (for the IP). Having a PortList without an
IP address is useless, so instead we should deal with parsing the IP
first, and checking its validity. Then, if we have the IP, we should
parse and check the ports, then create the PortList.

 * CHANGE logic of the bridgedb.parse.networkstatus.parseALine()
   function so that all of the parsing takes place in one `try:`
   block, and the `except`s catch any and all raised errors, logging
   messages and reseting variables to None as appropriate.

 * ADD a FutureWarning if we ever see a networkstatus document with a
   valid IPc4 address as one of its `ORAddress`es, because this means
   that tor/torspec and the descriptors have changed format.

 * CHANGE networkstatus.parseALine() to only return a PortList if an IP
   address was successfully parsed.

wfn/bridgedb,pagea/bridgedb,mmaker/bridgedb,mmaker/bridgedb,wfn/bridgedb,pagea/bridgedb