Replace hackish bresenham border-scanning with shadowcasting for caching player seen tiles.

This eliminates the render bug where walls would be intermittently visible if they're nearly perpendicular to you without killing performance.  The shadowcasting method might be good to generalize a bit and use for light casting too.