19752 - Friendly and informative errors when there's no libdir

There is no default libdir so when users do not set it they get
very unfriendly errors from File.exist etc which does not really
say what is wrong.

This commit adds a better error message when libdir is not set
19827 - Application#halt does not work if discovery data is supplied

Prior to version 2 the discovery situation was real simple, discovery
time == 0 means there were no discovery done at all.

Since version 2 things are a lot more complex as discovery time can be
zero if someone supplied specific discovery data either through --nodes,
or -I or through the API.

The halt() helper needed updating for the post 2 world and unfortunately
this means the behaviour also had to change slightly

it would exit with 0 when no discovery done but any responses were
received, effectively masking situations with no discovery but with some
failures.

This refactors the code and changes the meaning of 0 slightly in the
case of no discovery to: no discovery were done and > 0 responses were
received, all ok.

Thus in cases where discovery isn't done for whatever reason you still
get correct exit codes in the case where any results were failures.