Digging Into .NET Loop Performance, Bounds-checking, Iteration, and Unrolling