Explicitly set target type outside of initialisation function

This will allow for additional target types, which are likely to
be needed soon.
Support for generating clean targets

If clean targets (tidy, clean, purge) are present in the maker
file they will be run as hooks, and their dependencies will be
respected.  In this way, both pre- and post- clean hooks can be
set up.  This should probably be rare though.