Major refactor - adding n-dimensions, much more composable, splitting out functionality to work on 1 dimension at a time