Yield in setup

Here's the change for having setup() a bit more readable.
Unfortunately I had to split setup() and _setup().

A coroutine is a generator, which means that needs something to yield from it to generate something.

Simply doing:
loop.call_later(setup)

def setup(self):
  yield from foo
  log(something)
  yield from bar

won't work, since when setup() is called back by the loop, will return a generator, which needs something to have it produce the results. The only way for the loop to have it done is to:
- have the generator yielded from by some other coroutine
- use Task (asyncio.async() in this case wraps around it)

In other terms, setup now removes itself as writer and then calls asynchronously _setup() which eventually will add the default writer, after having setup everything.

It should not be a problem, flow-wise, i find just uglier than I though, to have to split it.

*NOTE* Please test it in a real HW env, before merging. I tested it on my env with a simple stub, which does not highlight any real HW problem.

Also, I updated some of the unittests you amended, for completeness:
- check that the callback is also called, after a read
- that in case of empty queue, no blocking write() is called
if you get  a zero length response, it's easy: we can modify the method which is expected to return something but it does not, with the cycle.
either:
FOO()
while not yield from BAR():
    yield from asyncio.sleep(0.1)

where BAR() is a corouting returning something (I'm not sure if I need to wrap parenthesis around the yield from), or modify BAR()

@coroutine
@timeout(9.0)  # IIRC specs says 9 secs top
def BAR()
  data = super().read()
  while not data:
      yield from sleep(0.1)
      data = super().read()

we need to add a timeout decorator, I don't thing there is one out of the box.

From the interface point of view it means: either it gets the status, or will raise an exception (e.g. timing out.). how we get it, it's an implementation matter. Which is what get/writeFOO wrappers around the base class are for :-)