By splitting the common tasks performed by the networking module out
into a separate set of classes, it is possible to reduce code
duplication and improve the structure of the networking module.
The wnettools module now performs _almost_ all the actual commands that
control the network interfaces, splitting it from the actual connection
logic contained in the networking module. Splitting these two tasks also
allows for tool changes to be made in a central location, rather than
spread throughout the networking.py file.