Improve EC2 API error responses

This is a final patch from series of patches improving EC2 error
responses that makes finishing touches.

Useless EC2APIError exception is finally annihilated. Nova exceptions
that were raised outside of EC2 API are now translated to appropriate
EC2 error codes using ec2_code attribute.

With EC2 exceptions fixed, HTTP status code corresponding to raised
exception is now returned instead of previously hardcoded 400. All
expected exceptions are treated as client errors and returned with 4xx
HTTP status code for compatibility with EC2 API.

Unexpected exceptions are now always logged on ERROR log level, CRITICAL
wasn't really appropriate.

Following valid EC2 error codes were added to existing exceptions
eliminating the need to translate them explicitly:

 * InvalidKeypair.ec2_code = 'InvalidKeyPair.Format'
 * KeyPairExists.ec2_code = 'InvalidKeyPair.Duplicate'
 * QuotaError.ec2_code = 'ResourceLimitExceeded'
   (*LimitExceeded exceptions inherit from QuotaError)

Exceptions caught in Executor were reordered for better readability.

Implements: blueprint ec2-error-codes

Change-Id: I27f9397d006f1b66b53a91b04ec6763a4d8ac740
Merge "Improve EC2 API error responses"