When we use the server error to respond to user's failing to start a
stream it is slow to return an error and unclear to the user what went
wrong. This diff introduces a simple settings check before attempting
to stream and catch and explain specific URL/key issues to the user.
In the case of preset services we check there is a Stream Key before
attempting to start a stream.
In the case of "custom" we only verify there is a URL since for some
services that's all that is required or the user may use user/password
authentication.
Pull UI validation and its helpers to their own class. This class will
be used to validate forms and perform UI-action checks such as
checking stream keys aren't empty and in this diff now holds the logic
to ensure there is a source before the person starts a stream.