New implementation for `defaultIfEmpty`
New implementation for `defaultIfEmpty`

This prevents assigning the `empty` variable in every iteration which I didn't really like.

This is a direct port of Jon Skeet's second `defaultIfEmpty` implementation from here:
http://codeblog.jonskeet.uk/2010/12/29/reimplementing-linq-to-objects-part-12-defaultifempty/

balazsbotond/eslinq