Add training capability and Dataset type

A new function, train() has been added that takes the contents of a dataset as a 2-dimensional array and trains the network over it.
The data is now encapsulated as a Dataset type. Inputs, outputs, and targets are stored this way
Finally, the namespace for include files has been shortened.