Gradient Improvements

- Added support for the "gradientTransform" attribute on both linear and radial gradients. The matrix in this attribute needs to be applied to attributes with coordinate values on the gradient element in order to transform them into the correct coordinate space.

- Added support for a value of "pad" for the "spreadMode" attribute on both linear and radial gradients. This is the default value but was not implemented correctly. In order to implement, we examine the properties of the gradient along with the element to which the gradient is being applied to determine if we need to expand the bounds of the gradient to fill the element. If so, we do so and adjust the color stops and positions so they are correct for the new gradient bounds.

- Divided ISvgStylable into ISvgBoundable and ISvgStylable. The SvgUnit.ToDeviceValue method just needs bounds so it can take ISvgBoundable. Moved SvgDocument.GetDimensions() to SvgFragment and made SvgFragment ISvgBoundable.

- Fixed a bug in SvgFragment.PushTransforms where it was calling the SvgUnit.ToDeviceValue overload that takes no parameters. This overload doesn't work if the value being converted is a percentage. (The overload
  should probably be removed entirely, but we didn't take that on in this commit.)

- Fixed an issue in SvgGroup.Bounds where a child with empty bounds would cause the group's bounds to be reported as empty.

- Fixed broken build by adding missing SvgMarker.MarkerUnits property.

- Converted files that we touched with mixed tabs and spaces to spaces. Also removed unused usings from files we touched.

- Converted SvgLinearGradientServer to use properties without backing fields for X1, Y1, etc. in order to match SvgRadialGradientServer.

- Moved default value assignments into constructors for consistency.