SubjectSubscriptionManager fix.

Fix for #961

If an already unsubscribed Subscriber is added, the subscription function ends up in an infinite loop as the inner unsubscription logic changes the state to another object before the outer state machine continues.

- The outer state machine loop now exits if unsubscription happened and doesn't attempt to modify the state.
- The removeObserver method is changed that if the subscription to be removed is not in the array, it returns this instead of an unnecessary copy. In addition, copyOf calls have been replaced by arraycopy to avoid reflective array creation.