playlist/metadata: do not crash whilst connecting

If we haven't connected yet, then "mpc" won't be available.
Don't kill ourselves over it.
controls: fix hotkeys when focusing elements

If you're trying to type into a text field, then we don't want to steal
the keypresses to switch tabs.
tcp-client: do not create multiple read pollers

If we have connect() called multiple times, don't leave the previous read
poller running.  This can happen when someone does connect(); connect();.
Along those lines, also kill the poller when we disconnect().
tcp-client: handle connection errors

If a connection fails, we get back the resultCode, but we never actually
check it.  That means we lie to the higher layers and say we're connected
when we're not really.

Also pass that code to the higher levels if they've requested notification.
tcp-client: do not leak sockets

If one object has connect() called more than once (like when reconnecting),
make sure we destroy the previous socket rather than leaking it.
handle connection errors

If we fail to connect, don't initialize mpc objects and such.
Update the UI so the user can see that things are hosed.