Initial take on Extension Support

- TYRUS-266: Extension support
- TYRUS-283: permessage-compression extensions
- TYRUS-280: Extension parser now allows params without values

Additional tasks done (no JIRA issues):

- Refactored frame represenation (part of TYRUS-266)
  - org.glassfish.core.Frame
- Added test for ExtendedExtension (name might change)
- Added test for CompressionExtension
- Autobahn test suite is 100% green (including compression tests)

TODOs:

- validation (Frame, ExtendedExtension#*, ...)
- exception processing (thrown during ExtendedExtension# processIncoming & processOutgoing)
TYRUS-275: Shared ClientContainer feature - GrizzlyClientContainer

By default, client container is created one per connection. This approach provides perfect isolation, but performance suffers when there is a need for lots (thousands) connected clients from single JVM instance. When this feature is enabled, ClientContainer will be reused.

How to enable:

                final ClientManager client = ClientManager.createClient();
                client.getProperties().put(GrizzlyClientContainer.SHARED_CONTAINER, true);

 or

                final ClientManager client = ClientManager.createClient();
                client.getProperties().put("org.glassfish.tyrus.client.sharedContainer", true);

or via system property:

                -Dorg.glassfish.tyrus.client.sharedContainer=true

Another thing to include in considerations is that shared container is currently never stopped - there is no close() method on WebSocketContainer and we cannot assume this info from runtime data. Default container will be stopped after onClose() method invocation, leaving no running threads.
Grizzly 2.3.8
code cleaning
CompressionExtension renamed to PermessageDeflateExtension (matches ietf draft name)
TYRUS-286: Shared client container idle timeout.

Following code will enable shared client container and stops it after 5s of inactivity.
Inactivity here means that container does not handle any connection. Existing connection
even with no transferred data will always keep container alive.

ClientManager client = ClientManager.createClient();
client.getProperties().put(GrizzlyClientContainer.SHARED_CONTAINER, true);
client.getProperties().put(GrizzlyClientContainer.SHARED_CONTAINER_IDLE_TIMEOUT, 5);
TYRUS-286: Shared client container idle timeout.
TYRUS-286: Shared client container idle timeout.