Don't throw from search

Stop using throw for non-exceptional cases such as Solr returning a
non-200 status.  These cases may be recoverable and using the `{error,
Reason}` idiom is cleaner and may perform better since it avoids
try/catch.

The search and dist_search functions will now return one of the
following:

* {ok, {RespHeaders, RespBody}},
* {error, {Code, RespHeaders, RespBody}},
* {error, Reason}.

The first error type is when Solr gives a non-200 response. The second
error type is when ibrowse fails for some reason.

All places, that call search or dist_search have been updated to check
for all 3 cases above and take the appropriate action. If ibrowse,
search, or dist_search happen to throw or error/exit for other reasons
then it is a bug or a true exceptional case. In either case the right
thing to do is "let it crash". This is Erlang, after all.