Fix `(nsError as Error).localizedDescription` output (#967)

Because NSError is not `LocalizedError` and `_swift_Foundation_getErrorDefaultUserInfo` does not handle NSError instances, `(nsError as Error).localizedDescription` didn't return expected output. So let's handle NSError case in `Error.localizedDescription` implementation.
diff --git a/Foundation/NSError.swift b/Foundation/NSError.swift
index ffc19ce..bee29e3 100644
--- a/Foundation/NSError.swift
+++ b/Foundation/NSError.swift
@@ -285,7 +285,11 @@
 public extension Error {
     /// Retrieve the localized description for this error.
     var localizedDescription: String {
-        let defaultUserInfo = _swift_Foundation_getErrorDefaultUserInfo(self) as! [String : Any]
+        if let nsError = self as? NSError {
+            return nsError.localizedDescription
+        }
+
+        let defaultUserInfo = _swift_Foundation_getErrorDefaultUserInfo(self) as? [String : Any]
         return NSError(domain: _domain, code: _code, userInfo: defaultUserInfo).localizedDescription
     }
 }
diff --git a/TestFoundation/TestNSError.swift b/TestFoundation/TestNSError.swift
index 516f5d3..43c9a47 100644
--- a/TestFoundation/TestNSError.swift
+++ b/TestFoundation/TestNSError.swift
@@ -22,6 +22,7 @@
     static var allTests: [(String, (TestNSError) -> () throws -> Void)] {
         return [
             ("test_LocalizedError_errorDescription", test_LocalizedError_errorDescription),
+            ("test_NSErrorAsError_localizedDescription", test_NSErrorAsError_localizedDescription),
         ]
     }
     
@@ -33,4 +34,10 @@
         let error = Error()
         XCTAssertEqual(error.localizedDescription, "error description")
     }
+
+    func test_NSErrorAsError_localizedDescription() {
+        let nsError = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey: "Localized!"])
+        let error = nsError as Error
+        XCTAssertEqual(error.localizedDescription, "Localized!")
+    }
 }