allow changing URI on socket (re)open()

Allow setting a new query string on socket (re)open(). This is mainly to enable hinting to load balancers/proxies.
It may be discussed whether:
1) we should enable changing the entire URI on re-open or
2) the user should destroy and construct a new Socket per such reconnect (too heavy handed in my opinion. Note on a mobile device this may happen every time the user clicks the home button, phone call/text received, etc ).

For now I just added query string modification, we can discuss option 1.
** implemented full URI change in final PR