Ensemble cleanup

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