well, here is my half-arsed effort:
swivel.hip
It only works with triangles and needs nice clean geometry - ie. no more than two faces per edge (probably).
...it'll also screw up on the boundaries of open surfaces.
I imagine you could do it much better with a few python sops.