[WIP] Ensemble cleanup

Cleaning up ensemble.py. Change names as discussed in #24 and clean up unused code.
Tasks:
- [ ] Change `forward()`/`backward()` to `can_append()`/`can_prepend()`
- [ ] Change `locate()` to `find_valid_slices`