add h/w kernel size, stride, and pad for non-square filtering

while keeping everything working as-is.
im2col + convolve non-square filters, padding, and stride
test rectangular im2col
fix GPU indexing

Thanks to @ejaz-izy's debugging in
https://github.com/BVLC/caffe/pull/505#issuecomment-50287608
test non-square filters by separable convolution of Sobel operator

Compute the G_x kernel of the Sobel operator as a full filter and as
separable filters to check the rectangular filter output.
Merge pull request #505 from shelhamer/non-square-filters

Non-square Filters and Separated Stride and Padding
Add NetState message with phase, level, stage; NetStateRule message with
filtering rules for Layers.
Incorporate NetState{,Rule} into Solver/Net.  Net::FilterParam
includes/excludes layers based on whether the NetState meets each
layer's NetStateRule(s).
Use unified train/test nets in examples.
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.
Make multiple losses work by inserting split layers and add some tests for it.
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.