Great question. For complicated constraints, I don't think `project!`, `toedge`, and `tocorner` can be much benefit. I plan to handle those cases by having the constraint return `Inf` when the point has wandered into forbidden territory; the linesearch algorithm then has to backtrack.

However, for a simple case of bounds constraints, you can quickly calculate the farthest you should search, and this can be very helpful information that speeds convergence by eliminating the need to test useless points. So they seemed worth having, but not worth trying to generalize to difficult cases.