Dagservice interface

There are two things going on here, the first converts DAGService to an interface. That means anything backed by DAGService can be transparently backed by a local blockstore or RPC.

The second is replacing the BlockSplitter Split() function with Next(). Split() currently returns a channel that blocks are passed down. Next() returns a []byte and an error. I did this because I was getting non-deterministic junk blocks when I had GOMAXPROCS > 1 and was using an RPC DAGService (I didn't find out why). This method also passes errors from the reader back to the block consumer, which is good. It also appears to be slighty more performant, but not significantly so.
Hm, this is a very different concurrency model. I haven't seen this in Go yet, do you have examples? 

I think we should stick to channels. 

Also, streaming data should be "read out" not "pushed". I.e. the `Push` function will cause all sorts of concurrency headaches because it's the provider telling the client when to read. Instead of push, it should work like this:

```Go
splitter := NewBlockSplitter(io.Reader) 
next := <-splitter
// or
splitter := NewBlockSplitter()
split := splitter.Split(io.Reader)
next := <-split 
````

Once the reader is made available, the client should read whenever the client can.