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>
@vieux Is this acceptable, to have `nsinit` support AUFS only for now? It's only meant as a test/debug binary if I understand correctly and these changes are here only to validate that the libcontainer changes work as expected.

Alternatively, if we were to implement support for the other graphdrivers, should we peek into Docker's `config.json` from inside `nsinit` to see what the graphdriver is, or should we take a command-line argument inicating what is the graphdriver in use and expect the caller to match it?

When we send the implementation for checkpoint/restore in docker, it will not have these problems, considering that from docker we know what the graphdriver is and we can remount the correct root at the time of restore.