Adds rate of fire modifier

As title says.
You'll need to use .Product here to aggregate the modifiers properly.  A combination of 200% and 50% should bring you back to 100%, not 250%.

The naive approach (multiply everything together, then divide by the same power of 100 will risk overflowing, but something like the following should work :

```csharp
var modifiers = self.TraitsImplementing<IReloadModifier>()
	.Select(a => a.GetReloadModifier());

FireDelay = Util.MultiplyNumberByPercentages(Weapon.ReloadDelay, modifiers);
```

where I have defined a new utility method for calculating the product of percentages avoiding integer overflow:

```csharp
public static int MultiplyNumberByPercentages(int number, IEnumerable<int> percentages)
{
	var a = 0;
	var b = 0;

	checked
    {
		foreach (var p in percentages)
		{
			// Catch integer overflow and discard some precision from
			// both the numerator and denominator
			while (true)
			{
				try
				{
					var temp = a * p;
					b *= 100;
					a = temp;

					break;
				}
				catch (OverflowException)
				{
					a /= 2;
					b /= 2;
				}
			}
		}
		
		while (true)
		{
			try
			{
				return a * number / b;
			}
			catch (OverflowException)
			{
				a /= 2;
				b /= 2;
			}
		}
	}
}
```

Note: I wrote this off the top of my head based on my understanding of how the `checked` operator should work (I haven't used it in practice before now).  I haven't tested this, and it may be completely broken :)