* rewrite with Graph
* use Moose roles
* allow fields used in roles to be customized
* couple this with Makefile infrastructures