Enhance retry decorator to allow not just catching of types of exceptions (eg. IOError), but specific instances of those exceptions (eg. catch IOError(errno.ECOMM), but not IOError(errno.EINVAL))

UT modified to match these changes, details below

Extended existing tests:
========================
a) pass without my change:
test_no_retry_required_instance - will pass without changes (as it succeeds always)
test_unexpected_exception_does_not_retry_instance - passing exception instance doesn't affect the test, the UnexpectedError is still uncaught

b) fail without my change, pass with it:
test_retries_once_instance - fails to catch specific exception instance, without my change
test_multiple_exception_types_instance - ditto
test_multiple_exception_types_mixed1 - ditto
test_multiple_exception_types_mixed2 - ditto
test_limit_is_reached_instance - again, specific exception instance is uncaught, but test code catches it - yet we can see no retry is done from counter (so hit assertion)

New tests:
==========
Most will pass without my change, as exception instances are never caught
(these are mostly negative tests to check my change doesn't swallow more exceptions than it should -
 eg. RetryableError(errno.EINVAL) when only RetryableError(errno.ECOMM) is specified))

a) pass without my change:
test_specific_exception_type_uncaught - really just a quick sanity test of my new function :)
test_specific_exception_type_caught1 - ditto
test_specific_exception_type_caught2 - ditto
test_specific_exception_instance_caught2
test_specific_exception_instance_uncaught1
test_specific_exception_instance_uncaught2

b) fail without my change, pass with it:
test_specific_exception_instance_caught1 - fails without my change, passes with