Implemented Promises

Put the `stream` in a _private_ variable and define `stop()` explicitly. Add a comment saying this will trigger the `ondataavailable` and link to documentation because it is not trivial.