Major overhaul to entire branch for exception handling.

All classes return base type of SqlResultBase instead of their actual type for the sake of error handling on the async branch.

This might be a breaking change to some applications, but simple casts and conversions will fix that.