Add header_library_dependency() class factory and refactor how env is updated

* Add a new `header_library_dependency()` class factory to simplify the
addition and creation of dependencies on the file
* Add a `dependencies` option to `cuppa.run()` which accepts a
dictionary of dependency *classes* for later instantiation and addition
to the scons environment
* unify the interface between the new runtime dependencies and the
existing pre-defined dependencies
* refactor the `add_to_env()` classmethod calls for adding and updating
the scons environment. For calls that are expected to 'register'
themselves in the env add helper methods to allow the back-end
registration menchanism to be updated without breaking client code
* re-write build_with_asio in terms of the new build_with_header_library
module
* update the `add_options()` classmethod to accept an `add_option`
method so that clients don't need to call `SCons.Script.AddOption`
directly allowing future updates to be added, such as option grouping