Don't fork when not running in a jar.
hasOption should check defaults.
Lots of Socket changes, some of which may break things!

 - When a Connected socket is closed, also include the reason in the
   Logger.info() call.

 - ConnectedSockets now handle IOExceptions when processing the selection
   key. IOExceptions are passed to a handler function in SocketWrapper
   which decides if this should be a fatal error or not (always yes right
   now.)
   - Because of this, if a non-ssl connection is made to an ssl socket,
     SecureSocket can now send them an error telling them this and close
     the socket, rather than just holding open a socket and ignoring it.
     - In future we should allow for ports that can be either SSL or not
       depending on the socket that connects.

 - As SSLByteChannel.close() gets called for cleanup when sockets close
   themselves, it will now no longer throw a ClosedChannelException if one
   occurs during the final attempt to wrap().

 - SSLByteChannel.unwrap() no longer sleeps for 100ms during every socket
   read. This was added in 2c7e76, but thss can no longer cause a 100% cpu
   loop due to changes made in 17df8555 which abort the SSLLoop after
   repeated underflows. Further changes made in this commit also break out
   of the SSLLoop early rather than repeatedly unwraping.
   - This means we no longer add an additional ~300ms of latency for no
     reason.

 - SSLByteChannel.sslLoop() will now abort the loop immediately if unwrap()
   produces an empty read outside of a handshake task (this happens if a
   non-ssl connection is made to an ssl port)

 - SSLByteChannel.sslLoop() underflow limit is now split in 2, standard
   underflow, and task-related underflow.
   - standard underflow is only increased if we are not performing a task,
     this is set to "5" as before.
   - task underflow is increased when we are performing a task.
     This is set to a really high number "5000" to allow tasks to complete,
     in a single sslLoop, but to also prevent a stray task getting carried
     away.
   This fixes the issue whereby no data was sent on the socket before the
   client sent it's first line of data, and also means we no longer need to
   sleep in unwrap()

 - SSLByteChannel.read() will now throw an SSLException if a handshake
   task is aborted due to an empty read.

 - "Socket inactivity counter threshold exceeded." error in UserSocket is
   now more verbose.

 - UserSocket now handles PING/PONGs the same way, regardless of if the
   user is connected or not.

 - Switch UserSocket to use String-Select not if/else in processLine,
   processNonAuthenticated and processAuthenticated

 - SocketWrapper now uses a ByteBuffer for the lineBuffer and only
   converts to a CharBuffer when it is time to hand off to processLine().
Refactor a few things.