Lots of additions.

Autoencoder class changed and I'm pretty sure there are no more serious
bugs. I've added lots of methods to the NeuralNet class which make life
much easier in the new optimise module, which now has more advanced
optimisation algorithms like conjugate gradient and BFGS, ready to work
with our neural networks. The algorithms occasionally have bugs
(zero-divide or overflow errors), but conjugate gradient seems to be
particularly reliable. AutoEncoder class now has a function that can
train it with mini-batches using conjugate gradient. I'll explain how I
use the autoencoder class next time we meet, but I've used it a lot in
the past week and it seems to be bug free.