* provide a way to search a namespace for a command, i.e. use "set" instead of "mpak:set"

* make exception handling much better. right now its absolutely
  terrible. always provide the good exception guarantee, and try to
  provide the strong guarantee wherever possible.

* make some convenience procedures to make the parse commands easier
  to write.

* file database. store a database linking each installed file to the
  package it belongs to. the plan is to make sure packages don't
  overwrite each others files, and to allow the user to verify that a
  package's files haven't been modified.

* provide requirements for which types of children/parents a node can
  have. at the very least, for every node in the tree, the pair
  (node_path(node), node->get_type ()) must be unique.

* this api is really disorganized right now...

* circular dependency bootstrapping. This is possible only if at least
  one of the dependencies in the cycle is optional. So, first we build
  the packages in the cycle without the optional dependency, then
  close the cycle by rebuilding the package with the optional
  dependency enabled.  We'll use with flags for this.

* use boost::lexical_cast wherever applicable.

* add support for symlinks managed by the package manager. if
  it's possible to install multiple versions of a package, a symlink
  will point to the executable of the latest version/last installed
  version. e.g. if you have gcc versions 3.2.0, 3.2.3, and 3.3.0
  installed, the symlink /usr/bin/gcc will point to
  /usr/bin/gcc-3.3.0, but the earlier versions will have
  /usr/bin/gcc-3.2.0 and /usr/bin/gcc-3.2.3.

* support for bound installations. some packages it may make sense to
  have multiple copies of the same version installed. For example, for
  kernel module packages, you may want a copy installed for every
  version of the kernel you have installed. we can do this by moving
  all the data for an installed version into a child node of the
  version node. The package metadata will have to specify that the
  package is bindable.

* SWIG binding!