Really accept all certificates in Java 7

In Java 7, a new X509ExtendedTrustManager class is introduced and the old
X509TrustManager implementations are wrapped in
`src/share/classes/sun/security/ssl/SSLContextImpl.java` using
`AbstractTrustManagerWrapper`. This class always checks the algorithm
constraints which may therefore reject some certificates that are signed with
an insecure algorithm (for example, MD2withRSA). By providing a full
X509ExtendedTrustManager implementation, this wrapper is not used and all
certificates get accepted.

Note: Java 6 does not have a X509ExtendedTrustManager class.
Provide a dummy X509ExtendedTrustManager

Java 6 does not have the X509ExtendedTrustManager class, but since
ClientTrustedManager needs to be extended from it in Java 7 a compatibility
class needs to be shipped with Java 6.
Show finest messages too, allow custom console LogLevel
logger: Use different method to enforce auto-scroll

Prevent WebScarab from crashing after logging binary data:

java.util.logging.ErrorManager: 1
java.lang.IllegalArgumentException: TextHitInfo is out of range
        at java.awt.font.TextLayout.checkTextHit(TextLayout.java:771)
        at java.awt.font.TextLayout.getCaretInfo(TextLayout.java:1211)
        at java.awt.font.TextLayout.getCaretInfo(TextLayout.java:1313)
        at javax.swing.text.GlyphPainter2.getSpan(GlyphPainter2.java:82)
        at javax.swing.text.GlyphView.getPartialSpan(GlyphView.java:330)
        at javax.swing.text.GlyphView.getMinimumSpan(GlyphView.java:556)
        at javax.swing.text.ParagraphView.calculateMinorAxisRequirements(ParagraphView.java:731)
        at javax.swing.plaf.basic.BasicTextAreaUI$PlainParagraph.calculateMinorAxisRequirements(BasicTextAreaUI.java:272)
        at javax.swing.text.BoxView.checkRequests(BoxView.java:935)
        at javax.swing.text.BoxView.getMinimumSpan(BoxView.java:568)
        at javax.swing.text.BoxView.calculateMinorAxisRequirements(BoxView.java:903)
        at javax.swing.text.BoxView.checkRequests(BoxView.java:935)
        at javax.swing.text.BoxView.setSpanOnAxis(BoxView.java:343)
        at javax.swing.text.BoxView.layout(BoxView.java:708)
        at javax.swing.text.BoxView.setSize(BoxView.java:397)
        at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1714)
        at javax.swing.plaf.basic.BasicTextUI.modelToView(BasicTextUI.java:1046)
        at org.owasp.webscarab.ui.swing.UIFramework$TextScroller.insertUpdate(UIFramework.java:919)
        at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:202)
        at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:749)
        at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:708)
        at javax.swing.text.PlainDocument.insertString(PlainDocument.java:130)
        at org.owasp.webscarab.util.swing.DocumentHandler$1.run(DocumentHandler.java:97)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:688)
        at java.awt.EventQueue$3.run(EventQueue.java:686)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:697)
        at org.owasp.webscarab.util.swing.TextComponentContextMenu.dispatchEvent(TextComponentContextMenu.java:32)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Strip "invisible" control characters from log output

The log output is also written to the console where certain characters have
a special meaning. ESC can be used to change colors, BEL rings the bell, DEL
removes the previous character... these side-effects are unwanted, hence remove
it from the log output.
Upgrade Bouncy Castle implementation to 1.48

Prepare for subjectAltName extension.
Copy CN and SAN from server certificate.

Previously, the following happens for a connection setup:
1. Client sends CONNECT example.com:443
2. Server creates a certificate for example.com and gives it to the client.
3. Client continues TLS handshake and sends the actual request, encrypted.
4. Server connects to example.com:443, established a secure connection and
   performs the request. It then writes the response back to the client.

This has generally worked well, but I found an Android client that connects to
an IP address (192.0.2.0:443) and does not use SNI to make clear that it
actually wanted "example.com". Instead, it connects to an IP address and
compares the names on the certificate with a string in the application code.
Since my goal is to make WS as transparant as possible, I changed the order to:
1. Client sends CONNECT 192.0.2.0:443
2. Server reads the following ClientHello from the client and searches for SNI
   server name.
3. Server connects to 192.0.2.0:443, sending the SNI server name if any.
4. Server retrieves certificates from 192.0.2.0:443.
5. Server generates a certificate based on the 192.0.2.0:443 certificate.
6. Server finishes handshake with client.
7. Client sends the actual request, encrypted.
8. Server reuses the connection to 192.0.2.0:443 and performs the request. It
   then writes the response back to the client.

This new approach may introduce slightly more delay since the client TLS
handshake is now completed when the server established a TLS connection with the
requested server. Previously the client could start sending data immediately
after sending the CONNECT line to WS.

Currently, the Subject field and subjectAlternateNames fields are copied from
the original certificate, disregarding the requested host name or IP address.
If the client gets a warning because of a domain name mismatch when connecting
directly, it will now also get that warning when connecting via WS. (It also
means that the above Android client does not complain about the names anymore.)

For that Android client, WS will still use the IP address in the logs though.
(WS cannot know which host name the Android client is comparing to.)

Conflicts:
	src/org/owasp/webscarab/plugin/proxy/ConnectionHandler.java
Debug log certificate from server
Merge pull request #10 from Lekensteyn/fixes

Log-related fixes
Merge pull request #11 from Lekensteyn/java7-trust-all-certs

Java7 trust all certs
Merge pull request #12 from Lekensteyn/copy-cert-details

Better client compatibility (copy SAN and Subject)