Added unit tests to make sure cotest calls tearDown as necessary.
Converted unit test descriptions from docstrings back to comments - the output from docstring one was bit ugly.
Centralized run() state handling to one function, and using reallyRun to actually execute things in subclasses.
Added state tracking to few places that were missing it.
Refactored depth handling to be _within_ state object. Now all we need to care about is passing it along everywhere.
Some more refactoring. Now assuming state is always dictionary, and if not, wrapping it, and just providing it to external calls.
Changed tearDownAlways handling so what arguments override class variable.
Fixed Python2-isms (probably) - converting explicitly to list steps
within objects. As it was, iterables were stored at times resulting in
bad things happening when iteration was empty on the next
call. Similarly, file handling was converted to more Python3ic 'with
open()'.
Got rid of own dhcp config file, and just overriding the rebird protection=0 on OpenWrt in general.
Fixed DownPD case - it notably has different v4 connectivity than normal client cases.