Refactor EC2 API error handling code

Implements blueprint ec2-error-codes

Redundant logging code was united in new __init__.py:ec2_error_ex() helper
function and all standard EC2 error responses are now uniformly logged on
DEBUG log level because they are just responses to invalid client requests,
not nova errors.  Unexpected client/server errors are logged on ERROR/CRITICAL
level and their exception name is used as error code - no more useless
UnknownError. Error descriptions are supressed for unexpected server errors as
they might contain sensitive information. New unit tests are provided.

The code for consturcting EC2 error response which was duplicated in
__init__.py:ec2_error and faults.py:Fault was moved to
faults.py:ec2_error_response.

__init__.py:exception_to_ec2code helper function now always returns exception
name as an EC2 error code since there are no exceptions with ec2_code
attribute yet. These will be added in the follwing patch as required by
referenced blueprint.

This code cleanup serves as a base for future fix of current terrible EC2
error behavior.

Change-Id: Ie88b089dfe536a56f5a46e9c92ff90c6a1fef793
Merge "Refactor EC2 API error handling code"