refactor to use a Package class

this makes the generated log much simpler and actually turns out
to be internally a bit simpler too IMO. suprise! lol
use standard cb API with `defer()`
tidy format function
update test suite
remove use of when-all internally
change default meta file order
update cli

add tree rendering
fix config logic
update foreach