True generalisation of MilitaryManager

Most units use the attack/move code in the superclass. If a unit needs
specialised code, add its type to the specialUnits list and it will be
ignored by the super class and the sub class can do what ever it wants.
Lurkers in the Zerg manager are a good example.