New net interface

This feels like a good idea. (having the bs/dht message not expose it's proto)

The proto details are a little secret shared between the service message the net message. The service operations never have to interact or transform through proto.

``` go
// in net.message
func FromData(peer, data)

// in bitswap.message
func (bsmsg *BitSwapMessage) ToNet(p peer.Peer) NetMessage, error {
  // nb: bsmsg.toData() is private since BitSwap never needs direct access
  data, err := bsmsg.toData()
  if err != nil {
    return nil, err
  }
  return netmsg.FromData(p, data)
}

func (bsmsg *BitSwapMessage) toData() ([]byte, error) {
  // ... generate the proto and marshal it to bytes
}
```