various fixes for the addwatcher command and rlimit settings

- change the rlimit json value to indicate RLIM_INFINITY to None to
avoid any platform weirdness with using -1 as that value, which
isn't guaranteed. A convenience function in config.py handles that
logic
- have the addwatcher command build an rlimits dict to pass into the
arbiter/watcher in order to get those values actually used (as they
weren't before)
- make sure to catch ValueError in addition to OSError when starting
a process as ValueError will be raised if something goes wrong with
the setrlimit calls, and otherwise we get in a bad process retry
loop that avoids the throttling logic
- add special logic for setting the NOFILE limit that will assume
that the caller wants to use the configured kernel limit if they
pass a null value in order to use RLIMI_INFINITY. See the comment
for more details.
oh I see. My rational is that by doing this, you don't have to check if rlimits is at None at every loop. Also that makes it possible to get rid of another object : rlimit_keys.

Once rlimits is ready you can just iterate on its .items() to get the keys back