Proxy references

[should be merged after #238] This introduces the new `Proxy` object and uses in the places we discussed (`VariableView`, monitors, ...). I didn't make `Network` deal with both strong (for explicitly created `Network` objects) and weak (for `MagicNetwork`) references, but used the following approach instead: `Network.objects` always holds strong references to all the objects in the network during a run, i.e. code in `Network.run` can safely assume that the references are strong references. In a standard `Network`, `add` and `remove` directly manipulate `Network.objects`. In `MagicNetwork`, the `objects` list is filled during `before_run` and emptied in `after_run`. This seems to be an uncomplicated solution, what do you think?

If the last point is fine with you then this is ready to merge from my side.