In EnEntity.c, there are events, I suggest adding an event which is always fired on the client and ignored on the server. This event will pass in a vector position.
This event fires right before the position is modified and if the event returns say false, the client will not update the new position.
This is important because when using SetPosition on the server, it can create a jerky movement and any attempts of client prediction will only improve it so much. With the ability to remove the effects of SetPosition through an event it would allow us to minimize the non-fluid jerkiness.