Make RelayObservable Source return type disjoint
Make RelayObservable Source return type disjoint

Summary:
In Flow v0.99 we are changing function type annotations to be strict about their
static properties. This causes a small issue with the union of a Subcription and
`() => mixed` function type, where the latter is now understood to possibly have
an `unsubscribe` property with a mixed type.

This causes the following refinement check, which appears lower in this file, to
cause an error in the next version of Flow:

```
if (cleanup) {
  if (cleanup.unsubscribe) {
    cleanup.unsubscribe(); // <-- error here
  }
  // ...
}
```

In Flow v0.99, because `() => mixed` statics are now checked, Flow sees that
`cleanup.unsubscribe` might be `mixed`, which passes the conditional but could
cause an exception when called.

I also needed to change JestMockFn to have exact statics, because tests
sometimes use a value with that type in place of the cleanup function. That runs
into the `{} <: {+p?: void}` rule, which is an error. `{||} <: {+p?:void}` is
not an error.

Reviewed By: josephsavona

Differential Revision: D15522655

fbshipit-source-id: 2ae3c9016e2b07abaac79827082d2f8743623eb5

janicduplessis/react-native,hoangpham95/react-native,pandiaraj44/react-native,hoangpham95/react-native,exponentjs/react-native,myntra/react-native,exponent/react-native,arthuralee/react-native,exponentjs/react-native,facebook/react-native,javache/react-native,myntra/react-native,hammerandchisel/react-native,facebook/react-native,janicduplessis/react-native,exponentjs/react-native,janicduplessis/react-native,janicduplessis/react-native,janicduplessis/react-native,facebook/react-native,javache/react-native,facebook/react-native,javache/react-native,hoangpham95/react-native,pandiaraj44/react-native,facebook/react-native,exponent/react-native,exponentjs/react-native,janicduplessis/react-native,javache/react-native,hoangpham95/react-native,exponentjs/react-native,exponent/react-native,pandiaraj44/react-native,hammerandchisel/react-native,javache/react-native,facebook/react-native,myntra/react-native,facebook/react-native,hoangpham95/react-native,myntra/react-native,arthuralee/react-native,javache/react-native,myntra/react-native,hoangpham95/react-native,exponent/react-native,exponentjs/react-native,janicduplessis/react-native,hammerandchisel/react-native,facebook/react-native,arthuralee/react-native,javache/react-native,exponent/react-native,arthuralee/react-native,hammerandchisel/react-native,pandiaraj44/react-native,hammerandchisel/react-native,hammerandchisel/react-native,janicduplessis/react-native,hammerandchisel/react-native,myntra/react-native,exponent/react-native,exponentjs/react-native,javache/react-native,exponent/react-native,myntra/react-native,pandiaraj44/react-native,hoangpham95/react-native,hoangpham95/react-native,javache/react-native,myntra/react-native,myntra/react-native,exponent/react-native,exponentjs/react-native,facebook/react-native,arthuralee/react-native,pandiaraj44/react-native,pandiaraj44/react-native,hammerandchisel/react-native,pandiaraj44/react-native