Automatically attempts to reconnect after disconnection

Upon receiving the connection close event (fired on disconnection, and after failed connection), we attempt to reconnect. The delay between close and reconnect defaults to 100ms, but backs off exponentially. The tenth failed connection will result in a delay of ~100 seconds.