Refactoring ApiListener to be more generic

Each CrudAction now got API specific configuration under the `api` config key

Each action can configure the API behavior for 'success' or 'error' behavior,
based on the events emitted from the action.

The configuration options is:

(array)	api.methods	    - list of http verbs allowed for this action when in API mode
(int) 	api.success.code    - the http response code used for 'success' API responses
(array)	api.success.data    - a list of key/value pairs to extract data from subject or raw
(int)	api.error.code	    - the http response code used for 'error' API responses
(string)api.error.exception - exception class to use for errors
(array) api.error.data	    - a list of key/value pairs to extract data from subject or raw

Special error.exception config

If you set 'error.exception.type' to 'validate' a special 'CrudValidationException' class
will be used, that contain all the validation errors from the request, both the local model,
and the models relations.

Example of 'data' usage:

```
// extract 'id' from $subject and put it into array($modelClass => array('id' => $id));
array('subject' => array('{modelClass}.id' => 'id'))

// set array($modelClass => array('id' => 10));
array('raw' => array('{modelClass}.id' => 10));
```

`_redirect` and `beforeRender` event subjects now contain much more consistent state
properties, and will be identical to the one from the 'after*' event

It's now possible to configure the `detectors` in the API listener

The valid detector keys are:

- ext: 		For CakeRequest->params['ext'] comparison with this value
- accepts: 	For CakeRequest::accepts() comparison

JSON and XML is configured by default already as before.

```
// Configure detector 'json' to respond to /posts.json and request type application/json
$this->Crud->listener('api')->config('detectors.json', array('ext' => 'json', 'accepts' => 'application/json'));
```

Keep in mind, if these detectors are changed, you need to call `setupDetectors()` again