Implement Array.UnsafeLoad and Array.UnsafeStore. Both functions ignores bounds check when possible.
* Array.cs: Add UnsafeLoad and UnsafeStore functions that don't perform bounds check.
The JIT will generate, when possible, direct a load/store. Right now the only case we can't
handle are stores to reference arrays.
Reference arrays are covariant on their element type which means that we must perform a runtime
type check on stores to preserve type safety. Since the type check is usually must more expensive
than the bounds check we simply ignore this for now.
The reasoning behind this decision was that given our initial target are corlib's collections and
they are too covariant to their element types they do need too a runtime type check on stores to ensure
correctness.