internal refactoring, changed backprop interface
 - backprop now does not require the inputs and uses the outputs coming from last run
 - moved backprop logic into the layers itself (that was my original intention)
 - created an output layer class to start the backpropagation