I've attached a patch that does this (and cleans up the event loop that handles menu movement in the process). Works kindof like windowmaker's edge resistance, i.e. it doesn't snap, but there's resistance against moving through an edge. Seems to work ok in practice; LIP parameter might need some more tweaking, though.

While setting up a GNUstep development box for a friend of mine this weekend, once we got it all up and running, he moved the application menu somewhere and then moved it back into the default upper-left corner, and then suggested that the menu should really just "stick" perfectly in the corner once you become within a few pixels of it. I had one of those "why didn't I think of this?" moments and then thought that since this was a very simple idea but a very good one as well, that I'd pass it along.