Implemented memory managment in CudaFilter

Global memory implementation complete
(zero optimizations)
No Optimization Testing Point

This point in the development was used to record data for unoptimized
speed up
Implemented basic shared memory

Basic shared memory implementation used for loading image data into
shared memory during convolution. If a pixel needed for convolution is
outside of the shared memory block, then a global memory read is done.
Because of this decision, thread divergence increases with the size of
the filter.