Data augmentation via random rotations

This PR implements a `rotate` option in the `TransformationParameter` message which operates analogously to `mirror`. It's `false` by default; setting it to `true` causes images to be randomly rotated by an integer multiple of 90 degrees. If `mirror` is also enabled, there are 8 possibilities for the randomly transformed output image.

An error is thrown if the input data is not square (i.e., if `datum.height() != datum.width()`); the logic for dealing with square rotations is easier to start with, and I believe that `transformed_data` is expected to have the same shape as the input data.