Snap/SVG TextPaths
Testing the textpath attr(I think you'll need 0.2 or later, and not sure it works in Opera)
var s = Snap("#svgout");
var path = "M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100";
var text = s.text(50,50,'Hi there')
.attr({ 'textpath': path })
.textPath.animate({ 'startOffset': 2000 }, 5000 );
The actual svg markup looks like this (when you've clicked on run)....