Make resizing & cropping with PIL work

Previously it was trying to use undefined variables
Separate layers relatively independent of images out of vision_layers
Arrange the data layers to be in alphabetical order
Organize the loss layers in alphabetical order
add EqualNumBottomTopBlobs() property for layers; use in
ConvolutionLayer
ConvolutionLayer can take N bottom blobs and N top blobs
Merge pull request #609 from jeffdonahue/multiconv

Generalize CONVOLUTION layer to multiple inputs/outputs
report UVA in platform test
switch to unified virtual addressing CUDA memcpy

Host / device copies are distinguished by the virtual address of the
pointers instead of explicit memcpy modes.
replace softmax cudaMemcpy with caffe_gpu_copy
do all caffe_copy() as UVA mem copy, and drop caffe_gpu_copy()

Do all memory copies by `cudaMemcpy` in UVA mode so that the same
`caffe_copy()` interface works for all transfers.

`cudaMemcpy()` is used in lieu of BLAS copies because they do not
understand UVA.

Drop the now unnecessary `caffe_gpu_copy()` since location of the
pointers is now irrelevant to the interface.
replace all memcpy by caffe_copy
replace all memset with caffe_set() / caffe_gpu_set()

...except for `SyncedMem` since it has no type.
reduce caffe_copy to instantiations, split off caffe_memcpy for void*
fix casts (static for void*)
Merge pull request #602 from kloudkl/layers-in-order

Layers in order
Merge pull request #555 from shelhamer/uva-memory

Switch to Unified Virtual Address memory copies
Merge pull request #549 from jamt9000/fix-resize-crop-pil

Make resizing & cropping with PIL work
customize compiler setting in Makefile.config

in case of issues with default compilers or exotic platforms.
Update caffe.proto

Add pad_h, pad_w, kernel_size_h, kernel_size_w, stride_h, stride_w to support pooling on rectangle regions.