breaking out wave and potential into different classes, making IO similar to old way of handling wave io - the wave object knows how to write/read itself.