Custom Warheads refactor

Split out just the refactor and work for the Custom Warheads.

This branch contains no changes to the yaml files other than what the UpradeRules does.

A short guide to how new custom warheads can be defined can be found here: http://pastebin.com/xUg2bfT5
Though the main purpose of this pull request is for regression testing.

Will allow functionality requested in #5436.

Supercedes  #5882. So implements functionality requested in #5618.

Lays groundwork for requests in #4363, solves some of them. (CreateSFX, DamageActor).

Lays groundwork for #2838.
@Phrohdoh has already done a lot of work towards mind control.

Once this pull request is accepted/complete, I'll create a new pull request for the DisabledByWarhead additions that build atop of this.
You can remove this helper by moving the weapon report sound into `WeaponInfo.DoImpacts` (maybe rename that method to `Impact`), and then doing the string -> weaponinfo lookup directly in the things that currently call this.