Add Rectangle.With() extension methods
Need to flesh out the with-pattern methods for `Rectangle` to account for the various points: Left Top, Left Center, Left Bottom; Center Top, Center Center, Center Bottom; Right Top, Right Center, Right Bottom.
* WithLeftTop(int, int)
* WithLeftTop(Point)
* WithLeftCenter(int, int)
* WithLeftCenter(Point)
* WithLeftBottom(int, int)
* WithLeftBottom(Point)
* WithCenterTop(int, int)
* WithCenterTop(Point)
* WithCenter(int, int)
* WithCenter(Point)
* WithCenterBottom(int, int)
* WithCenterBottom(Point)
* WithRightTop(int, int)
* WithRightTop(Point)
* WithRightCenter(int, int)
* WithRightCenter(Point)
* WithRightBottom(int, int)
* WithRightBottom(Point)
Also should expand the conversions to add methods to get the points.
* Point ToLeftTop()
* Point ToLeftCenter()
* Point ToLeftBottom()
* Point ToCenterTop()
* Point ToCenterBottom()
* Point ToRightTop()
* Point ToRightCenter()
* Point ToRightBottom()
**Note:** *`ToCenter()` is already part of the API.*
To support the above methods, need to add methods that get the correct `RightX` and `BottomY`. To keep consistency, should also add the range. The reason these two methods are needed is that `Rectangle` incorrectly handles `Right` and `Bottom` by naively adding the respective size to its coordinate. This means that `Rectangle(0, 0, 10, 10)` has a `Right` of `10` when it should be `9`. The reason is normal zero-based indexing math logic, the same reason the last index of an array is `count - 1` and not `count` itself.
* int ToLeftX()
* int ToRightX()
* int ToTopY()
* int ToBottomY()
Of course all the similar methods and overloads for `RectangleF`.
issue