Add functions for manipulating cgroups

Support creating and setting cgroups on Linux.

Because cgroups are linux-specific, maybe this library should be split
out to a separate repository. Since cgroups are implemented as a
filesystem, the primitives are portable to all OS'es (open, read, write,
close, mkdir, rmdir, readdir, ...).

cgroups can be mounted under a single mount point or across several
mount points. For example, a standard Ubuntu install:

```
cgroup /sys/fs/cgroup/cpuset cgroup rw,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/cpu cgroup rw,relatime,cpu 0 0
cgroup /sys/fs/cgroup/cpuacct cgroup rw,relatime,cpuacct 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,relatime,memory 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,relatime,devices 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,relatime,blkio 0 0
```

The mount options control the type of cgroup. A process enforces
restrictions by creating a new directory in the appropriate cgroup and
adding the PID to the task file.

To accomodate this setup, alcove_cgroup operations fold over the list
of cgroups. Creating a new control group hierarchy will create a new
directory in cpuset, cpu, cpuacct, memory, devices and blkio. Similarly,
adding a task will add the PID to each of the cgroups' task control file.