lazycat: render debug messages to dark grey
maxlen: new function to get longest element in object

It supports list, dict, or tuple, and more which supports __len__()
lazycat: add dns module

Not implemented yet
lib: say.available_cmds: add support for filter

Use a list to filter commands to display in given dict.
completion: rewrite to support automatically match

Main changes:
  Redesigned command tree, chained all commands together via 'nextlevel'
  key in higher level dict

  Rewrite complete_cmd, the job could be finished in just one function,
  no class needed.

  Rewrite MLCompleter, now it's generalized completer. Besides complete
  commands defined in dict, it could find module specific completer in
  modules named as 'complete', which should be a class.

  Class route() is more robust now.
cli: simplify run.with_log

Splited out pexpect.spawn as independent function.
color: convert all defined color to lower case named function
lib: say: add two colored words to identify ok/fail
lib: add new functions

get_local_ip() is used to get all non-loopback local IP addresses.

syscmd_stdout() is used to execute a system command, and get it's
output.
doc: add document about color usage
cli: dns: new module used to simplify DNS problem locating

New module, have these features by now:

 - list our DNS servers by name/class
 - flush cache on DNS iterator
 - resolve name / IP each other, which supports DNS server specify

Not implemented features:
 - one-key-diag, super easy tool used to locate DNS related problem
 - trace, alias for "dig +trace ..."
doc: INSTALL: add comments about write config files
cli: dns: display problem fixes
lazycat: config: add runtime debug turn on/off support

logging.basicConfig() would work only at root of logger, it doesn't work
in leaves.
lazycat: dns: add time counting

And do deep copy when init ShuTong, if not, things may mess up.
cli: dns: print result as table
Revert "cli: dns: print result as table"

This reverts commit 3ea484ebf0c37736a5a676f44a616cacafc6d6e4.

Save this as a option, redefine the table.
lazycat: dns: redefined output format
lazycat: dns: implement 'dns trace ...'
doc updates