Either can't have a recursive type

Either as a struct causes recursive type errors.
Fixing unassigned local variable errors by using

Visual Studio/CSC cannot deal with variables that reference themselves
in the declaration.

http://msdn.microsoft.com/en-us/library/4y7h161d(v=vs.110).aspx

Default should be OK here but certainly not an optimal fix.
adding FirstOption/LastOption

Adding a class `IEnumerableExtension` to house
additional extension methods and FirstOption/LastOption