Completely rewrite mobjs over/under/on other mobjs

Using code from Heretic and Hexen, this commit properly allows for a
Cacodemon, Lost Soul or the player to pass over or under other objects.
It also alerts monsters if the player lands on them. This should
hopefully fix the several issues caused by the other somewhat naive
solution I had in place. Initial tests are promising.