pushd

Here's an attempt at `pushd`. I think I've covered everything, but my grasp of `pushd` was quite poor going in to this exercise. I'm happy to discuss potential changes, code style, etc. I'll get to work on `popd` and `dirs` once you're happy with this change.

There's one thing I couldn't decide on, maybe you have an opinion: It seems as though `dirs` (and in turn `pushd`/`popd`) replace `$HOME` with `~` when printing the list of directories in the stack. I can't seem to find any documentation on this, but it seems to be the norm (at least in linux/mac terminals). Example:

```bash
$ cd
$ pushd some/dir
~/some/dir ~
```

I think this is to reduces some of the visual noise. I'm considering implementing this when I get around to working on `dirs`.

I used this online documentation for reference: http://ss64.com/bash/pushd.html