Added MinBy, MaxBy, etc.

Added MinBy, MaxBy, MinByOrDefault and MaxByOrDefault methods and replaced calls of the style OrderBy{Descending}().First{OrDefault}() which is not as performant.