Oo refactor

@keflavich @ChrisBeaumont - this is a start at the next refactoring based on discussions with @ChrisBeaumont. It needs to be rebased once #5 and #6 are merged.