Add capacity hint version of Observable.cache()

- Special case in ReplaySubject for create(1) to optimize for single emitted value

- Add unit tests for Observable.cache(1) and ReplaySubject.create(1)

@benjchristensen is this the kind of solution you wanted for #1303?
Yeah, it's meant for having less overhead for the common occurrence of caching an Observable that emits a single value and completes, but I don't know if the current implementation of SingleValueReplayState buys us much over UnboundedReplayState to be honest. I tried a couple of version where SingleValueReplayState didn't allocate an array, but it was kind of awkward to work with the current index based interface of ReplayState.

I would at least turn Observable.cache(1) to ReplaySubject.create(2) though, since it would need to hold the onComplete state as well.