replace Reader thread with generator func

removed Reader class.  the main problem with using a thread
to read mutations is that stream requests can timeout waiting
for mutations and in some contexts this is an error but not always.
the reader thread cannot be kept alive forever waiting for muations
so timeouts were treated as errors.  this implementaion allows for
timeouts and the Stream is in control of it's own reads without relying
on reader thread pushing mutations into it's queue.

added a standalone recv_op function
which can be used to return responses for single commands or
placed inside a generator for yielding stream responses.

the generator is managed by the UprStream class with a similar api
to the last implemntation except without threading.

Change-Id: If7c62860d85cf5fb8b421dc970d05b9c09911230