refactoring to prep for v0.5 release. cleaned up interfaces, solidified options to reduce future breakages, and added legacy path for deprecating features.