Use acceleration system rather than setting the speed for vertical movement too, although for some reason it's still faster and doesn't match horizontal acceleration at the same value. Also use a different acceleration for fast movement
Better water friction code. Fixes random pushes between the X and Z axes while walking in water. Also clean some acceleration code.