Add checkpoint/restore functionality to nsinit and libcontainer

New code was added to nsinit and libcontainer to use the criu(8) utility
to checkpoint and restore a container.

While there are no hard-coded assumptions about Docker, the new C/R
functionality has only been tested with Docker containers.

The nsinit command line usage for checkpoint and restore is consistent
with the rest of nsinit commands.  However, for easier C/R usage, the
user can specify the container ID on the command line.  The best way
to get started is to run "nsinit checkpoint --help" and look at the
"EXAMPLE:" section.

Signed-off-by: Saied Kazemi <saied@google.com>
As you have said, nsinit is a test/debug tool to validate libcontainer APIs and, therefore, should not be considered as production tool to checkpoint and restore containers.

However, if there is a strong desire in adding support for additional graph drivers to nsinit, we have the following options ordered from least desirable to most (for me):

1. Parse rootfs path to determine filesystem type.
2. Peek into Docker's config.json.
3. Specify on the command line.
4. Add driver type to container.json.

In short, if we really want additional graph driver support in nsinit, I suggest adding the driver type to container.json.

Any thoughts?