NH-3675

https://nhibernate.jira.com/browse/NH-3675
Initial implementation with unit tests
```csharp
public class C {
    public void M1(int[] a) {
        for(var i=0;i<a.Length;i++) {
            Console.WriteLine(i);
        }
    }
    public void M2(int[] a) {
        for(var i=0;i<a.Length;++i) {
            Console.WriteLine(i);
        }
    }
}
```

Will be compiled to (in release):
```il
    // Methods
    .method public hidebysig 
        instance void M1 (
            int32[] a
        ) cil managed 
    {
        // Method begins at RVA 0x2050
        // Code size 21 (0x15)
        .maxstack 2
        .locals init (
            [0] int32
        )

        IL_0000: ldc.i4.0
        IL_0001: stloc.0
        IL_0002: br.s IL_000e
        IL_0004: ldloc.0
        IL_0005: call void [mscorlib]System.Console::WriteLine(int32)
        IL_000a: ldloc.0
        IL_000b: ldc.i4.1
        IL_000c: add
        IL_000d: stloc.0
        IL_000e: ldloc.0
        IL_000f: ldarg.1
        IL_0010: ldlen
        IL_0011: conv.i4
        IL_0012: blt.s IL_0004
        IL_0014: ret
    } // end of method C::M1

    .method public hidebysig 
        instance void M2 (
            int32[] a
        ) cil managed 
    {
        // Method begins at RVA 0x2074
        // Code size 21 (0x15)
        .maxstack 2
        .locals init (
            [0] int32
        )

        IL_0000: ldc.i4.0
        IL_0001: stloc.0
        IL_0002: br.s IL_000e
        IL_0004: ldloc.0
        IL_0005: call void [mscorlib]System.Console::WriteLine(int32)
        IL_000a: ldloc.0
        IL_000b: ldc.i4.1
        IL_000c: add
        IL_000d: stloc.0
        IL_000e: ldloc.0
        IL_000f: ldarg.1
        IL_0010: ldlen
        IL_0011: conv.i4
        IL_0012: blt.s IL_0004
        IL_0014: ret
    } // end of method C::M2
```