OptionalEnsemble and SlicedTrajectoryEnsemble

Reopens PR #83.

This will resolve #80 and resolve #82.

Task list:
- [x] Name change: `AlteredTrajectoryEnsemble` => `AlteredEnsemble`
- [x] Implement `OptionalEnsemble`
- [x] Tests for `OptionalEnsemble`
- [x] Implement `SlicedTrajectoryEnsemble`
- [x] Tests for `SlicedTrajectoryEnsemble`
- [x] `SlicedTrajectoryEnsemble.__str__` and test for it
- [x] Example ipynb for combining `SlicedTrajectoryEnsemble` with `SequentialEnsemble`