Operation Sample with Observable v2

Issue #74

- Sample will terminate if either the source or the sampler terminates or throws an error.
- The sampler now emits values only in its onNext() method. Therefore, if the sampler completes and there is a sampled value available (```valueTaken == false```), it won't emit the value before terminating.