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.
`arm.Weapon.Warheads.Select(w => w as DamagerWarheadInfo).FirstOrDefault(w => w != null)`, but all of these DamagerWarheadInfo checks feel off to me.