Sentinel: better specify startup errors due to config file.

Now it logs the file name if it is not accessible. Also there is a
different error for the missing config file case, and for the non
writable file case.
Get absoulte config file path before processig 'dir'.

The code tried to obtain the configuration file absolute path after
processing the configuration file. However if config file was a relative
path and a "dir" statement was processed reading the config, the absolute
path obtained was wrong.

With this fix the absolute path is obtained before processing the
configuration while the server is still in the original directory where
it was executed.
Test: code to test server availability refactored.

Some inline test moved into server_is_up procedure.
Also find_available_port was moved into util since it is going
to be used for the Sentinel test as well.
Test: colorstr moved to util.tcl.
Sentinel: initial testing framework.

Nothing tested at all so far... Just the infrastructure spawning N
Sentinels and N Redis instances that the test will use again and again.