JavaDocs for all core water classes

Also cleaned up the API, removing 'public' from a bunch of internal impl
classes.