Remove most instances from PointXY and VectorXY

PointXY and VectorXY are only intended for cheap tasks,
as temporary representations of Point and Vector,
not for storing in memory or on disk.
Optimize FOV and related functions a bit
Use Point in Corridor and move many functions around

In particular, PointXY and VectorXY don't have their own operations
any more. They are just representations of Point and Vector.
Clean up cave generation