Feature ai events

 Initial commit for development of AI-Events

Development branch for feature

        AI-Events

to do:
    Add support for CreatureAI to send and receive Events

This development project is published at:
    https://github.com/Schmoozerd/mangos-wotlk/commits/feature_AI-Events

New functions:
* SendAIEvent (either around the npc, or to a specified npc)
* ReceiveAIEvent (hook to receive sent events)

Wrapper for these in EventAI:
* ACTION_T_THROW_AI_EVENT
* EVENT_T_RECEIVE_AI_EVENT

Goals:
Add support to make scripting - already with EventAI - _much_ more dynamic and powerfull.

Original draft of these ideas:
DESIGN DRAFT for EventAI - Notification handling

Mobs can throw events (called now "AIEvent") to nearby (friendly) NPCs
These events could be something like
"MyHealthIsCritical"
"MyHealthIsLow"
"MyEnemyHasLowHealth"
..

And the nearby NPCs can react on receiving these events.
With possible actions like
- Heal invoker
- Assist invoker in combat (like charge invoker's enemy)

New EVENT: ReceiveAIEvent
event-param1=sender-entry OR 0
event-param2=eventNumber
provided target type: INVOKER
also interesting target-type: INVOKERS_ENEMY

Also consider that these events must be checked for their relevance:
- Still Critical Health?
- Enemy already stunned?
- Other friendly start healing the invoker?

these checks might rely on some event-param3 = response-type to get some good checks

Depending on how good these Additional checks can become, mobs will behave way more intelligent.
Also they of course depend on additional information like which spell is used as response

Basicly the required AI behaviour is to get a good answer to:
Will my response be reasonable to the AIEvent?

Implementation suggestions:

1) Expand AssistInCombat system that already exists with this, but keep the handling for it on core side
Actually from then on AssistInCombat could be handled as AIEvent "AssistInCombat"

2) Add hooks to CreatureAI class for
ReceiveAIEvent(Unit* sender, uint32 aiEventCode, uint32 misc-value, [Unit* involved])
where:
sender      is the sender of the event
aiEventCode is the code that is sent (for EventAI some pre-defined cases, for SD2 on long term also free choice)
involved    is the unit that triggered sending the event like a mob casting a big heal spell onto the sender's enemy)