Rather than each object having an `add_to_network`, why can't `BaseNetwork` just have an `add` function, in which it adds objects to the correct list? It's kind of strange that e.g. `Node` has to know about `BaseNetwork`'s internal list structure in its `add_to_network` implementation.