allow unit needs to override their Units.Types value

because each unit can have more than one "Types", and sometimes it's
better to be able to force the Type that we want to prioritize
new convenience getter for critical needs

this allows to make critical needs without explicitly setting a CRITICAL 
priority. This newer getter is used to determine if the need can "capture"
units that are already busy/in-use.
reimplemented Units.contains() for convenience
new method to fetch units that are already busy/in-use

loops through the player's units and attempt to only return units that are
the "least in use" (and least damaged/crippled)
fetch all buildings from the player
added special handling of critical needs to allow immediate requests

critical needs will now immediately capture one of the existing player units
so that these needs are satified immediately instead of waiting for the next
produced unit
tweaked structure building, changed need to transient

transient allows workers to be immediately requested by mineral patchs
and other workers consumers
fixed exception when consumers list empty
experimental production changes to allow sloppy zealot army production