Added fplot to Axes subclass.

Plotting functionality for Python callables, ala Matlab's 'fplot'
function.

An adaptive step-size is used. Smaller step sizes are used when the
gradient of the function is larger.

Only one callable is supported so far, it would be desirable to support
an array/list of callables and plot them all simultaneously.

There are some unresolved problems. One is the inability to deal with
the scenario when f(x) is undefined for some x.
Added docstring to Axes.fplot
Scaled minimum step size with domain length.

Reduces the amount of unnecessary computation by ignoring partition
sizes that the user won't see with longer domains.
Small changes to the algorithm to reduce run time.

The old method computed 'left' and 'right' gradients. These are the same
for a linear approximation, which is what Line2D is anyway.

I have also stored some function values that are used later in the
algorithm. This is good if f is expensive to compute.

The above changes to reduce computation time by 20%.
Updated kwargs popping.
Speed up computation when f is expensive.

Now we call axes.plot with stored values of f instead of calling f on x.
This will improve performance when f is an expensive function.
Account for singularities in f.

When we find singularities, replace the function values with NaN so they
appear as separate Line2Ds on the plot
Make fplot object-oriented

Now Axes.fplot returns an FPlot instance. This represent the abscissae
and function values that resolve well at the specified axes limits.
Fix a couple of syntax errors
Move docstring inside class
Tidy module docstring
Make fplot process args properly
Update axes to reflect change in fplot api
Make FPlot class callable
Make FPlot class callable, to update axes limits

This is really inefficient. Actually, it just bisects a new array if the
updated limits are different from the current ones. There are blatantly
more clever ways to do this, like just extending the current absicissae
array if the new limits involve new points. Or, just doing a few
bisections when zooming in, as opposed to starting from scratch.
Add a demo.
Subclass python object
 Use actual machine epsilon
Add interactivity

This commit adds fplot to the pyplot module.  It also contains the necessary
event hooks to make the interactivity work.  It's a little slow right now so
I'm going to work on some optimisations to make the interactivity smoother.