Custom Warheads refactor

Changes included:

Warhead code split out of weapon code and refactored.
Warhead functionality now split into several classes, each handling one effect/impact.

Additional custom warheads can now be defined and called via yaml.
Custom warheads inherit the abstract class Warhead,
which provides target check functions.

Custom warheads have to define their own impact functions,
and can also define their own replacement for check
functions.
Minor fixes. IonCannonPower can now define how many ticks into animation the weapon impact happens (as opposed to at the end of the animation. Bridge can now define weapon used for demolition, default = "Demolish" as previous.