Cutsomizable "channel" dimension for ND-tensor

This is one of the step of generalizing 4D tensor to ND tensor for Mocha. Originally, the 3rd dimension of a 4D tensor is named the *channel* dimension, and many layers operate explicitly along that dimension (e.g. `SoftmaxLayer`, `SoftmaxLossLayer`, `AccuracyLayer`, etc.). Also, `ChannelPoolingLayer` is generalized to be a 1D pooling along any user specified dimension.

This PR is an effort for a well-defined behavior under the case of ND tensor. The goal is to allow the user to specify which dimension to operate on for those layers, and use a default dimension that is backward compatible with the good old 4D-tensor world.