Let's solve #729, Curved Text.

This pull request adds the basic ability to fabric.Text-like's to observe a fabric.Path. It includes a variety of options to control that relationship, such as observing rotation, simple collision detection, and a controllable distance offset along the path. It reimplements both JSON and SVG exporting features. It reimplements the JSON importing feature. It contains several minor bugfixes to existing fabricjs code. It provides detailed commentary of the algorithms related to the text-on-path feature for future development.
I faced poor performance in a complex test scene while changing the path continuously with mouse movement. I'm sure some of that is just my amateur use of fabric. This is the only reason this feature exists. As to unifying _render methods, the choice between the two options can just be made in the fabric.Path#_render method, if that suits fabric's purposes (let me know if you want it changed in this pull request).

In my version, the desired number of points you want to limit the sample to is what's stored. For instance, a value of 2 would sample the start point and the end point. A value of 3 would sample the start point, mid-point, and the end point. Et cetera. It results in straighter lines, which allows the text-on-path to still look relatively correct without performing the full calculations (because continuous straight lines are very close to case zero, which is the initial straight line that all text can be considered to exist on, even prior to this pull request).

While people are looking at the fabric.Path#_render method, I'd suggest refactoring the massive, context-only drawing operation (starting at the for loop) to its own utility function at some point. Basically, will fabric ever need to use such a function anywhere other than fabric.Path? I'd certainly think so; it's basically something that can generate the context shape of a complex path based on an array of command arrays (ex: [["M", 0, 0], ["L", 100, 0]]). Seems like a good candidate to be used in special purpose objects to do interesting things in a _render method without demanding the overhead of using a fabric.Path. I sourced some online code for a similar need in the text-on-path JSON viewer demo (I clipped some images by an arbitrary shape). It would have been cleaner to call a function that took my desired path (and then let me tell the context to stroke it and use it as a clip).