Implement package id specifications

This gives cargo a way to uniquely reference a package within a dependency graph. This is currently only used for `cargo update` and `cargo pkgid`, but this will extend in the future to possible configuration keys in the manifest, other commands like `clean`, etc.

Closes #593
Should this be `<spec>` instead of `<pkgid>` to match the "Usage" line?