AI and cyborg alarm code cleanup

Refactored awful triggerAlarm and cancelAlarm procs to hopefully avoid bugs like #4799. Alarms are stored in a proper datum instead of a 3-element list. The third argument of triggerAlarm (list of cameras that may be switched to) is always a list now, no more weird branching logic. Moved code common to living/silicon/robot and living/silicon/ai into living/silicon, so technically all silicon mobs track alarms now, but only AI and cyborgs do anything with them.