unit tests for covariance

- refactoring so not everything for the entire Observable ends up in a single class