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.