Initial implementation of API

This is the full consuming code of the new API in nsinit/exec.go

```go
        var (
                exitCode int
                master   *os.File
                sigc     = make(chan os.Signal, 10)
                factory  = libcontainer.New([]string{os.Args[0], "init", "--fd", "3", "--"}, logger)
        )

        signal.Notify(sigc)

        config, err := loadContainer()
        if err != nil {
                log.Fatal(err)
        }

        process := &libcontainer.Process{
                Args:   context.Args(),
                Env:    context.StringSlice("env"),
                Stdin:  os.Stdin,
                Stdout: os.Stdout,
                Stderr: os.Stderr,
        }

        if context.Bool("tty") {
                if master, err = process.AllocatePty(); err != nil {
                        log.Fatalf("failed to allocate pty: %s", err)
                }

                go io.Copy(master, os.Stdin)
                go io.Copy(os.Stdout, master)

                state, err := term.SetRawTerminal(os.Stdin.Fd())
                if err != nil {
                        log.Fatal(err)
                }

                defer term.RestoreTerminal(os.Stdin.Fd(), state)
        }

        container, err := factory.Create(config, process)
        if err != nil {
                log.Fatalf("failed to exec: %s", err)
        }
        defer container.Destroy()

        go func() {
                resizeTty(master)

                for sig := range sigc {
                        switch sig {
                        case syscall.SIGWINCH:
                                resizeTty(master)
                        default:
                                process.Signal(sig)
                        }
                }
        }()

        exitCode = process.Wait()

        os.Exit(exitCode)
```

It feels like a lot of the interaction is pushed off onto the process and not the container.  I don't know how to change this because the factory is doing most of the magic in the first part of the container's lifecycle. 

#### API changes during implementation
I started to move more things off of the container config and onto the process.  Args, Env, Tty handling, etc.  Also added a Signal method to the process so that we can forward signals.  I don't know if this should be on the Container and you provide a process id or if it should say per process.

The other part is a new method on the factory: `StartInitialization(pipefd uintptr) error`

We need this because of the reexec loop that we have to do.  It's an internal method and is not meant to be consumed by most.  Because of the reexec we also need to have InitArgs specifying the binary and args of the app that we are going to reexec. 

#### Logging added
Because we are moving things around in the API I thought it would be a good time to implement logging to help debug if something goes wrong.

```bash
nsinit exec --tty bash
daemon@koye:/$ ls
bin   container.json  etc   lib    media  nsinit.log  proc  run   srv  tmp  var
boot  dev             home  lib64  mnt    opt         root  sbin  sys  usr
daemon@koye:/$ cat nsinit.log
[nsinit] 2014/07/17 18:07:23 begin container creation
[nsinit] 2014/07/17 18:07:23 create syncpipe with parent: 6 child: 5
[nsinit] 2014/07/17 18:07:23 starting init process
[nsinit] 2014/07/17 18:07:23 container  starting init process
[nsinit] 2014/07/17 18:07:23 container  init process started at 2822008 with pid 32332
[nsinit] 2014/07/17 18:07:23 locking os thread and initializing label system
[nsinit] 2014/07/17 18:07:23 connecting to syncpipe via fd: 3
[nsinit] 2014/07/17 18:07:23 reading init state from parent
[nsinit] 2014/07/17 18:07:23 container  placing pid 32332 into cgroups with systemd
[nsinit] 2014/07/17 18:08:59 begin container creation
[nsinit] 2014/07/17 18:08:59 create syncpipe with parent: 6 child: 5
[nsinit] 2014/07/17 18:08:59 starting init process
[nsinit] 2014/07/17 18:08:59 container  starting init process
[nsinit] 2014/07/17 18:08:59 container  init process started at 2831657 with pid 32607
[nsinit] 2014/07/17 18:08:59 locking os thread and initializing label system
[nsinit] 2014/07/17 18:08:59 connecting to syncpipe via fd: 3
[nsinit] 2014/07/17 18:08:59 reading init state from parent
[nsinit] 2014/07/17 18:08:59 container  placing pid 32607 into cgroups with systemd
[nsinit] 2014/07/17 18:10:07 begin container creation
[nsinit] 2014/07/17 18:10:07 create syncpipe with parent: 6 child: 5
[nsinit] 2014/07/17 18:10:07 starting init process
[nsinit] 2014/07/17 18:10:07 container  starting init process
[nsinit] 2014/07/17 18:10:07 container  init process started at 2838405 with pid 382
[nsinit] 2014/07/17 18:10:07 locking os thread and initializing label system
[nsinit] 2014/07/17 18:10:07 connecting to syncpipe via fd: 3
[nsinit] 2014/07/17 18:10:07 reading init state from parent
[nsinit] 2014/07/17 18:10:07 container  placing pid 382 into cgroups with systemd
[nsinit] 2014/07/17 18:10:07 container  creating network for loopback
[nsinit] 2014/07/17 18:10:07 container  sending init state to child
[nsinit] 2014/07/17 18:10:07 received init state from parent
[nsinit] 2014/07/17 18:10:07 container  setup console /dev/pts/6
[nsinit] 2014/07/17 18:10:07 container  initialzing network for loopback
[nsinit] 2014/07/17 18:10:07 container  initializing mount namespace in /var/lib/docker/btrfs/subvolumes/242cbab09c5dcd5f12e448508716dfe6c23bb5e26141c49fbfd5bac6e45ee13a
[nsinit] 2014/07/17 18:10:07 container  setting hostname "koye"
[nsinit] 2014/07/17 18:10:07 container  restricting proc and sys filesystems
[nsinit] 2014/07/17 18:10:07 container  execing users process
[nsinit] 2014/07/17 18:10:07 container  changing status from created to running
[nsinit] 2014/07/17 18:10:07 container  waiting on init process
[nsinit] 2014/07/17 18:10:07 init process started
```