added upperRight() and lowerLeft() to rect
return type of S*rect<T> is now rect<S>
fixed intersect() in rect: max{X,Y} are not part of the rectangle, zero-size rectangles don't intersect with anyone