Improve exception handling

This improves exception handling in spark.

1) All error messages are caught at the top dialog level. This will ensure that the dialog knows about the error and can close itself before showing error or success dialog. (It will avoid dialog on dialog).

2) Wrapped few exceptions into `SparkException` with constant error strings.

3) Need to wrap all thrown exceptions as spark exception. Post that, we can catch an exception at top-level other than `SparkException`, we can hide them from user showing `Unexpected Error` while logging them in console if `developerMode` is on.

I would like to avoid (3) in this CL, as it is becoming big. Will send a separate PR for that.

Addresses #2352  #2415 

@devoncarew PTAL thanks.