Moving utility code out of network.py into a new module, util.py; also starting unit testing code.
Fixing pineCLI.py to work with last change
Added 'forward' functions to Network, Layer, and Neuron; updated other code to use these new functions. Moving towards haveing forward and backwards functions, which should cleanup the training code
Big update: added 'backward' functions to Network, Layer, and Neuron, which will set the parameter gradients in the neurons based on passed in downstream gradients.  This will make the training code much more modular as all gradients are calculated in small pieces.  Added 'cost' and 'cost_gradient' functions to Network, Layer, and Neuron, which can be used to determine the cost (error) of the network, and the cost (error) gradient, which normally will then be fed into network.backward() as the downstream gradient, since the cost function is normally what we will be minimizing.  This is much more modular now, and will allow for setups such as stacked networks.  The util.py file has a few functions rigged up to allow legacy demos to use the new cost functions instead of the old RMS error function (which is not the best for every activation function), and this will be cleaned up in later edits.  Will be working on the training next to make use of the new code
just a few formatting changes for comments
updated comments to explain backward pass at neuron level
updated neuron.backward to add gradients to existing gradients for batch purposes
moved activation functions into their own module
Added reset_gradients and update_parameters
Added SGD trainer; need to do testing
SGD bugs have been fixed; changed example array indexing to be input,target instead of target,input
replaced old RMS error with avg cost; added option to pineCLI to use old Backprop trainer
merged the old training code in training.py into the new trainer.py