Another bugfix related to my CPU/GPU test changes: make NetTest a
MultiDeviceTest (Caffe:set_mode(Caffe::CPU/GPU) isn't run without this).
Add loss_weight to proto, specifying coefficients for each top blob
in the objective function.
Add net tests for loss_weight -- check that the loss and gradients
throughout the net are appropriately scaled for a few loss_weight
values, assuming a default weight of 1 in the loss layer only.  Also
modify test_gradient_check_util to associate a loss of 2 rather than 1
with the top blob, so that loss layer tests fail if they don't scale
their diffs.
Generalize loss by allowing any top blob to be used as a loss in which
its elements are summed with a scalar coefficient.  Forward for layers
no longer returns a loss; instead all loss layers must have top blobs.
Existing loss layers are given a top blob automatically by Net::Init,
with an associated top_loss_weight of 1 (set in LossLayer::FurtherSetUp).
Due to the increased amount of common SetUp logic, the SetUp interface
is modified such that all subclasses should normally override FurtherSetUp
only, which is called by SetUp.
-Add tests for the case of multiple losses, one in the middle of the
network.  Make this case work by inserting split layers (and add another
SplitInsertion test).
-Add test that we can call Backward with an ACCURACY layer.  This
currently fails, but should be possible now that we explicitly associate a
loss weight with each top blob.
Net::Init can determine that layers don't need backward if they are not
used to compute the loss.
AccuracyLayer only dies when necessary.
Disallow in-place computation in SPLIT layer -- has strange effects in
backward pass when input into a loss.
Also display outputs in the train net.  (Otherwise, why have them?)
Add ACCURACY layer and softmax_error output to lenet_consolidated_solver example.
Store loss coefficients in layer; use for prettier training output.