Floor refactor

This rewrites most floor code. Functionally, it's 95% the same. I'm mildly concerned about lag (because I made liberal use of ChangeTurf, which is considerably more expensive than just swapping icon_state and floor_tile). On the other hand, this should make floor code more maintainable and extensible, with a lot less snowflake. There are no pathing changes in this PR, which means that I wasn't able to remove some instances of snowflake involving standard floor tiles, but the code is still a lot cleaner than it was before.

As for bugs:
Fixes #1839
Fixes #2797
(edited after second & sixth commits)