Optimize the streaming engine and fix some bugs:

- There was a race condition when starting a stream with demand = 0.
  This is fixed by using demand values from Long.MinValue to -1 for
  demand during the initial creation of the stream.

- Demand overflow is not signaled asynchronously to prevent calling
  onError while onNext is still running.

- Remove some unnecessary atomic and volatile variables and replace them
  by regular vars.

- Remove the nested loop in the streaming engine. Without heavy
  synchronization actions, there is no need to optimize at this point
  to avoid the synchronization.