consolidate build rules for object files
automatic discovery of source directories
move cuda output from build/.../.cuo -> build/cuda/.../.o

This will allow nvcc's -M dependency generation option to work
harmoniously, since it assumes that output will have a .o extension.
update use of GetLayer -> LayerRegistry::CreateLayer
Merge pull request #1636 from longjon/get-layer-gone

Holiday merge - Update use of GetLayer to new registry function
automatic dependency generation
Merge pull request #1472 from longjon/incremental-build

Makefile improvements: rule consolidation, dependency generation
add BaseConvolutionLayer

This provides a common place for code used by ConvolutionLayer and
DeconvolutionLayer, simplifying the implementations of both.
add CPU_ONLY ifdef guards to BaseConvolutionLayer
rewrite ConvolutionLayer to use BaseConvolutionLayer helpers
add DeconvolutionLayer, using BaseConvolutionLayer
add util/coords.hpp for coordinate mapping functions

This will be useful for keeping track of the coordinate transformations
induced by, e.g., convolution and pooling layers.
add FilterMap for the coord mapping used by (de)conv and pooling layers
implement coord_map for all applicable layers
layers get a pointer back to their owning Net

This allows layers to do things that depend, e.g., on net topology.