Corrected bounds of Viewport.WindowExtent when rotated

The WindowExtent was represented by a BoundingBox which needs to be
axis-aligned since it only stores min and max points. If the viewport is
rotated, the actually visible extents (WindowExtent) will not be
axis-aligned. Added the Quad class which stores 4 corner points that do
not have to be axis-aligned and used this class to represent the
Viewport.WindowExtent instead of BoundingBox so it would contain the
proper values when rotated.