yuv: plumb in support for mono-chrome YUV buffers

The need for this will be obvious in the next commit
slicetype: cleanups - use bufSATD method where applicable
motion: use Yuv instance to hold fenc PU pixels (preparing for chroma ME)

This required making an init function which accepts the encoder color space. We
use 4:0:0 for lookahead since it does not keep chroma planes.  Note that I
explicitly renamed this Yuv instance fencPUYuv to make sure people understand it
is not a duplicate of the fencYuv kept by the Analysis structure; it will often
be a sub-partition of the CU fenc yuv.
motion: add a version of setSourcePU which can accept fenc from another Yuv

The analysis code has already gone through the trouble of loading the CU's fenc
pixels from the source picture into a much smaller Yuv buffer with small
strides. This allows us to avoid accessing the fenc PicYuv in a performance
critical portion of the encoder.

We utilize the Yuv class to copy the PU, since it already has logic for
calculating part offsets for luma and chroma
search: rename index variable to puIdx for consistency
yuv: fix size check in copyFromYuv

The target buffer needs to be as large as or larger than the source. The fact
that this check has never failed tells me all users of this function have equal
sized arguments.
motion: sync argument names between the header and the cpp file
reference: move reconPic pointer to base class so it is available to ME
primitives: add a chroma satd table that is indexed by luma partition

There are a number of chroma partitions that have dimensions of 2 or 6 and those
cannot use satd (which is 4x4 based), so we degrade them down to SAD which makes
me unhappy.
primitives: use luma satd functions for chroma, where applicable

The commented lines should be considered TODO items for the assembly team