update how single-results are determined in AsyncResults

single msg_id (not a list) implies single result

fixes issue where `targets='all'` could imply single-result when only one engine.
update client.get_result to match AsyncResult behavior
put back TaskTimeout

accidentally removed in cleanup
Merge pull request #3654 from minrk/alltargets

fix single-result AsyncResults

`direct_view(targets='all')` could produce single-result behavior if only one engine is registered.