Removed implicit convertions of str object to bytes from base64.

This also exposed some bugs in urlib2 and email.base64mime, which I
tried my best to fix. However, someone will probably have to double
check.
diff --git a/Lib/email/base64mime.py b/Lib/email/base64mime.py
index c60f8db..6db007d 100644
--- a/Lib/email/base64mime.py
+++ b/Lib/email/base64mime.py
@@ -66,9 +66,10 @@
     charset names the character set to use to encode the header.  It defaults
     to iso-8859-1.  Base64 encoding is defined in RFC 2045.
     """
-    # Return empty headers unchanged
     if not header_bytes:
-        return str(header_bytes)
+        return ""
+    if isinstance(header_bytes, str):
+        header_bytes = header_bytes.encode(charset)
     encoded = b64encode(header_bytes).decode("ascii")
     return '=?%s?b?%s?=' % (charset, encoded)