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 (eg. with the ILSupport extension).

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).
This would achieve the same AFAICT:
  a.Attributes & MethodAttributes.HideBySig == b.Attributes & MethodAttributes.HideBySig