Edgesnap

Resending #447

@kscottz I fetched and merged develop and copy pasted my code. This should do it.