I've actually added some of those features you mentioned into my code, although I haven't put it out yet because I didn't think it was up to quality. I facilitated jumping and falling at different rates through a system similar to x-movement, but one that always defaults the y-move to a value other than 0. It only considers falling when there are not two objects on the left and right bottom corners of the collision mask and jumping can only be done when there are two objects associated with that. The idea is that I will later use those two objects for slope collision movement - which in a Mario game can be expressed as like a modified corner-cutting that "hugs" to the object being moved over.
I am still trying to work that out, it's a little tricky. I am trying to anticipate when I am going to be moving onto and off of slopes as well as when Mario is pressing down while on one. I am not so sure about how you did the place_meeting with the && off the while condition like that because the move_x isn't always an integer (with stuff like this, I tend to do a preliminary check to see if there is going to be any collision within the movement range when at maximum speed; if there is no collision it just moves otherwise it will do the precision stuff). Also yeah, you're right about the animation stuff with x-based collisions, I didn't have it set right for when Mario runs into stuff but is still trying to move.