Fix printf format character for 32-bit machines

On my 32-bit machine, I got this error while compiling:

  root.c: In function 'try_read_inotify':
  root.c:1809:9: error: format '%lu' expects argument of type 'long
    unsigned int', but argument 4 has type 'unsigned int'
    [-Werror=format]

Changing the length modifier from 'l' to 'z' fixed this. C99 defines
the 'z' length modifier as the platform-independent modifier for
size_t arguments.
Fix casts from values to pointers

The casts produced this error while compiling on my 32-bit Debian
system:

  root.c: In function 'invalidate_watch_descriptors':
  root.c:655:34: error: cast to pointer from integer of different size
    [-Werror=int-to-pointer-cast]
  root.c: In function 'w_root_resolve_dir_by_wd':
  root.c:910:10: error: cast to pointer from integer of different size
    [-Werror=int-to-pointer-cast]

The ht_val_ptr function was used to do the correct casts.
Completely ignore is_pcre when PCRE isn't available

I did not have the PCRE headers so HAVE_PCRE_H was false. That
resulted in this error while compiling:

  rules.c: In function 'parse_watch_params':
  rules.c:207:7: error: variable 'is_pcre' set but not used
    [-Werror=unused-but-set-variable]

The ifdef's now completely remove the is_pcre variable when PCRE isn't
available.