Clarify WebSocketImpl construction for client / server roles.

Made WebSocketImpl.role field final.
Reworked private constructors and removed logic that re-used
client constructor in the server constructor, only to later re-assign
the role field.

Made constructors private, to enforce use of factory methods which
indicate Role by method name, to avoid relying on whether the second
argument is a single Draft, or a List<Draft>.
Fix NullPointerException in SocketChannelIOHelper.

Use WebSocketImpl.getRole to avoid NullPointerException if draft has not
been assigned yet (i.e. WebSocketImpl.getDraft() returns null).

With this NullPointerException fixed, the code path through
closeConnection will be taken and an attempt to call removeConnection is
made. At that point, the connection will still be in state
ReadyState.NOT_YET_CONNETED, and will never have been added to the
connections collection. The appropriate action is to only attempt to
remove connections from server connection collection if it has
previously been added (i.e. reached ReadyState.OPEN).
Assign WebSocketImpl.draft field as soon as it's been matched.