Methods marked with 'ForwardRef' are now always replaced by the matching methods

Otherwise, it would depend on the order of the assemblies passed to the repacker.

```csharp
using System;
using System.Runtime.CompilerServices;

public static class Program
{
    [MethodImpl(MethodImplOptions.ForwardRef)]
    public static extern int GetNumber();

    static void Main(string[] args)
    {
        Console.WriteLine("The number is " + GetNumber() + ".");
    }
}
```
```fsharp
module Program

open System

let GetNumber() = 2
```

These two programs' merged assembly would depend on the order, ```GetNumber``` would either be marked as '```ForwardRef```' or would return 2, but ```ForwardRef``` is usually used for merging.

The ```ForwardRef``` one will now always be replaced by the other one (hence the title).

Also, I've split up the 'ILRepack.cs' file, but everything is still in the same class (partial classes).