Fixed broken ForExpression implementation.

ForExpression no longer executes the body if the test fails initially.
Added a unit test to cover this scenario.
Added some optimizations to ForEachExpression.

An enumerator is no longer used for array sequences.

If a public instance method "GetEnumerator()" returning a compatible
enumerator is found, that method will be called regardless of whether it
overrides IEnumerable.GetEnumerator().  These are the same semantics as
the C# 'foreach' loop and enables boxing avoidance for value type
enumerators.

If an enumerator is known to implement IDisposable, or known *not* to
implement it, then the type check or Dispose() call is omitted,
respectively.
Code Formatting Fixes

Fixed some code formatting inconsistencies.  Removed the temporary
Main() method I'd added to ForEachExpressionTest.cs.
Merge pull request #4 from mstrobel/master

ForExpression no longer executes the body if the test fails initially.