Fixed the issue that 'zip' calls 'onCompleted' twice

Fixed the issue reported by Vadim Spivak at https://groups.google.com/forum/#!topic/rxjava/79cWTv3TFp0

The original `zip` implementation may call `onCompleted` more than once but does not wrap the observer with a `SafeObserver`. When the observer is an internal observer, `zip` will break the Rx contract.

This PR wraps the internal observer with a `SafeObserver`.