mon, ceph: transition to separate CLI parsing

ceph is a new Python CLI that:
1) queries the underlying cephbin to get command descriptors,
2) parses user input and validates everything possible,
3) passes validated JSON command to cephbin for handling

The frontend also presents help, and takes over the CLI command
looping mode.

Signed-off-by: Dan Mick <dan.mick@inktank.com>

Conflicts:

	src/mon/Monitor.cc
	src/mon/OSDMonitor.cc
Enhance cephtool tests for coverage of CLI rewrite

Signed-off-by: Dan Mick <dan.mick@inktank.com>
wip: osd tell commands, CephFileparse, etc.
librados: add *_command() variants that allocate the result w/ malloc

These are helpful for commands that may have large results and are
expensive to process and/or transfer because retrying very inefficient.
The caller is expected to free(3) the result.

Signed-off-by: Sage Weil <sage@inktank.com>
vstart.sh: set python path(s); echo something for user to paste

Signed-off-by: Sage Weil <sage@inktank.com>
ceph: add support for --admin-socket <path>

Signed-off-by: Sage Weil <sage@inktank.com>
ceph: 'ceph daemon <name|path> <command ...>'

This is *much* easier than 'ceph --admin-daemon <path> <command ...>'.

Signed-off-by: Sage Weil <sage@inktank.com>
RadosClient: handle command replies
ceph: fix exception msg
ceph: pop off 'target' before sending command
rados.py: errnos must have errno. qualifier
Set conffile to passed -c, not conf

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Return correct error to main; always write outs to stderr

Signed-off-by: Dan Mick <dan.mick@inktank.com>
Check for and handle old-monitor

If it doesn't support get_command_descriptions, just send the
entire command.

Signed-off-by: Dan Mick <dan.mick@inktank.com>
rados.py: remove debug prints from *_command

Signed-off-by: Dan Mick <dan.mick@inktank.com>
ceph: restructure so old-style commands and new-style can share code

Signed-off-by: Dan Mick <dan.mick@inktank.com>
librados: use memcpy rather than strncpy for possibly-NUL data

Signed-off-by: Dan Mick <dan.mick@inktank.com>
rados.py: use librados-allocating versions of *_command

Signed-off-by: Dan Mick <dan.mick@inktank.com>
librados: unit tests for mon_command

Signed-off-by: Sage Weil <sage@inktank.com>
librados: add rados_monitor_log()

Add method to trail the cluster/monitor log for use by ceph -w.  Add a
simple functional test.

Note that changing the subscription level does not currently work
due to the protocol; you can't cancel a subscriptions.

Signed-off-by: Sage Weil <sage@inktank.com>