Zip potential NPE fix.

Issue #1891

My best guess is that the visibility of the items in the observers array is not guaranteed and some CPU/JVM optimizations may expose this. The fix initializes the observers array locally and uses the memory barrier provided by the incrementAndGet on the producer to ensure everything before that becomes visible for the subsequent subscriptions.
Oh, I see, you're setting it to -1 and then incrementing to 0. 

If thread visibility is the issue here, wouldn't it be the fact that `observers` is not volatile?

The `tick` method can be invoked on different threads. The `observers` is fully initialized before anything is subscribed to, but ...

1) downstream can call `request` at any time and that calls `tick` concurrently, possibly while `start` is still running
2) the `observers` reference is non-volatile so could theoretically not be visible to a thread `tick` is invoked on