feat(case/listener): provide listener on tasks and case executions

This commit provides an infrastructure for listeners:

- CaseExecutionListener and
- TaskListener

This infrastructre gives the possibility to add some custom code when a
state transition occured on a CaseExecution (ie. CaseExecutionListener) or a property changed on a
HumanTask (ie. TaskListener).

CaseExecutionListener:

- CaseExecutionListeners which will be notified when a state transition
  happens on a CaseInstance

    <case ...>

      <casePlanModel ...>

        <extensionElements>
	  <camunda:caseExecutionListener event="complete"
             class="MyCaseExecutionListener" />

	  <camunda:caseExecutionListener event="close"
	     delegateExpression="${myCaseExecutionLsitener}" />

	  <camunda:caseExecutionListener event="create"
	     expression="${myListener.notify(caseExecution,
               	             caseExecution.eventName)}" />

          <camunda:caseExecutionListener>
            <camunda:script scriptFormat="groovy">
	      your groovy script
	    </camunda:script>
	  </camunda:caseExecutionListener>

        </extensionElements>

        ...

      </casePlanModel>

    </case>

- CaseExecutionListeners which will be notified when a state transition
  happens on a CaseExecution (which is associated with a Task -
  HumanTask, CaseTask or ProcessTask; or a Stage)

    <case ...>

      <casePlanModel>

        <planItem id="PI_1" definitionRef="HumanTask_1 />

        <humanTask id="HumanTask_1">

          <extensionElements>

            <camunda:caseExecutionListener event="complete"
               class="MyCaseExecutionListener" />

            <camunda:caseExecutionListener event="close"
               delegateExpression="${myCaseExecutionLsitener}" />

            <camunda:caseExecutionListener event="create"
               expression="${myListener.notify(caseExecution, caseExecution.eventName)}" />

            <camunda:caseExecutionListener>
              <camunda:script scriptFormat="groovy">
                your groovy script
              </camunda:script>
            </camunda:caseExecutionListener>

          </extensionElements>

        </humanTask>

      </casePlanModel>

    </case>

Note: If no "event" is given, the provided CaseExecutionListener will be
notified on each state transition that can happen on a corresponding
CaseExecution.

TaskListener:

- a TaskListener can only be provided on a HumanTask

  <humanTask ...>

    <extensionElements>

      <camunda:taskListener event="create" class="MyTaskListener" />

      <camunda:taskListener event="assignment"
         delegateExpression="${myTaskListener}" />

      <camunda:taskListener event="complete"
         expression="${myListener.notify(task, task.eventName)}" />

      <camunda:taskListener>
        <camunda:script scriptFormat="groovy">
          your groovy script
	</camunda:script>
      </camunda:taskListener>

    </extensionElements>

  </humanTask>

Note: If no "event" is given, the provided TaskListener will be notified
on each transition (create, complete, assignment or delete) on a Task.

related to CAM-2239, CAM-2555