New net interface

Yeah, I suppose it's still too weak of a contract. It's better to either explciitly state that it's a reference or to deep copy.

Perhaps the best way to resolve this is to never expose the proto object... to refactor the way jbenet suggested in:

https://github.com/jbenet/go-ipfs/pull/69#discussion_r17580348

I think removing the public to Proto and generating the proto dynamically might be a good way to go. Do you agree?