Bug fix introduced in v1.14 relating to timer creation/clearance (#23).
Moved yRangeFunction from SmoothieChart to SmoothieChart.options.

This is more consistent with the rest of the options, but breaks a relatively new, obscure and optional API.
API documentation.

Documented the three different types of available options in the code using /** */ style comments.
Renamed some local variables named 'options' to make it clearer whether they're chart options, or series options.
Fewer comparisons/branches in calculating TimeSeries bounds.

 This alleviates the periodic judder I was seeing on a page with many SmoothieChart instances.
Binding function instead of capturing 'this' pointer.
Modified the TimeSeries.append() function to update existing data if a record for the timestamp already exists, or splice data into the array at the correct position if data is appended out of chronological order.  Added an option in TimeSeries.append() to replace existing data if data for that timestamp already exists (#12).
Document new behaviour/options on TimeSeries.append (#12).

Formatting consistency.
Minor refactor around min/max value tracking.
Rename locals for clarity.
Indented contents of export function (a whitespace-only change.)
Updated header for v1.16.