Expand Artifact API to expose build state

In order that something consuming an artifact can have access to extra
builder specific data add the State method which allows the caller to
ask for arbitary values by name.
Add support for vagrant with libvirt

Once we have produced a libvirt VM, we now have the option of using
the vagrant post-processor to create a .box file that can be used with
the vagrant-libvirt plugin.

This uses the new State method of the Artifact API to get necessary
information from the builder.