Reduce the clip region in ClipAndDrawGradient

We should reduce OutputDevice's clipping region to the bounds of the
polypolygon. To do this we run OutputDevice::Push(PUSH_CLIPREGION)
to have it set the clip region of the device, then intersect the clip
region of the device with the bounding rectangle.

Change-Id: I58ff5d1def1eca3c1213c7fd2d6a7205b70cdd01
Detect if polypolygon is a rectangle in DrawGradient

If the polypolygon that we use for DrawGradient is a rectangle, then we
need to 1) expand the gradient rectangle to avoid missing lines on the
right and bottom edge, and 2) we should pass NULL as the clipping
parameter for ImplDrawLinearGradient and ImplDrawComplexGradient.

Change-Id: I8d8289ace069b5c500db59d1a2addfcea8388dfb
Unify DrawGradient functions in OutputDevice

Turns out that the two versions of DrawGradient in OutputDevice are
almost exactly the same in every way, except one deals with a rectangle
and the other with a PolyPolygon. So I just convert the Rectangle into
a PolyPolygon and use the PolyPolygon function.

Now that the functions are unified, the need for a seperate function
to clip and draw the gradient is no longer really required, so I've
merged this back into DrawGradient.

Change-Id: I94d4af1bb7dd900495672f0c0481dc9a1083ff67