Use IReadOnlyList in ElementAt*

Supporting IReadOnlyList in ElementAt and ElementAtOrDefault - based on
recent changes on mono.
Linq refresh from Mono and other clean up

These files are being taken from mono:
ConstantExpression
EmitContext
ExpressionPrinter
NewExpression
UnaryExpression
CancellationTokenRegistration hash wont change

Making sure that the HashCode wont change even when the
CancellationTokenRegistration is disposed.
Final Clean Up