Refactor neurons.py, begin refactoring nets.py

Neuron classes are much better now.

It's annoying to access neurons through the Layer classes, so I
considered removing them. Now that I'm 90% of the way there I realize
it's a mistake. Accessing neurons through indexes is just as awkward.
I now believe the best solution is to make Layer act like a collection
where I can iterate over it etc.
Fail to redesign layers.py and net.py (not pretty)

I give up on redesigning the layer classes. They just make the problem
more confusing. Layer classes are included in this commit, but the next
they will be gone.

Usually classes simplify a program by acting as ONE distinct idea.
That is impossible for a layer class. For a programmer to use it she
must know the order to call methods for propagation and
backpropagation, which takes thinking on the level of the neurons,
defeating the entire purpose.
Classes are now neurons and nets, no layers

-Implementation of neural net improved
-Now accepts learning rate and bias parameters
Update tasks to pass the new params
Add weightfunc as parameter to neural net

Weight is no longer determined in the neuron class, it is passed in from
the net.
Change bias argument to func

This makes random initial bias possible, which is now the default.
Fix bug where inputs don't change predictions

It was due to inputs were not being set
Fix issue where backpropagate2 wasn't called
Fix major issue where net takes ages to converge

Fix the problem of the net taking far longer than it should to converge,
due to a misplaced sigmoid function in error calculations. It looks like
it behaves normally now. The two test tasks work, XOR and sin.