Replaces atom/HasEntered() with the builtin atom/movable/Crossed()

Crossed() is a byond builtin which is called automatically when two movable atoms overlap (as a side effect of Move(), but not when loc or x/y/z is changed).  Previously, turf/Entered() iterated through all objects in the turf in order to tell them an object had entered; with this change, HasEntered() becomes redundant and can be eliminated.

This may reduce lag when a large number of objects are moving in a small space (singularity, mining conveyors, etc) but should cause no changes to functionality at all.
Adds a border object list to turfs

This removes some unnecessary or redundant checks in turf/Enter().

Also fixes a movement glitch involving atoms moving out of an object (locker, etc) and into walls.
Replaces the border objects list with a temporary list in the proc.
Merge pull request #1636 from SuperSayu/starcrossed

Replaces HasEntered() with Crossed() and reduces redundant checks on turf/Enter()