Add support for workers with input but no output
Refactor unit tests
Increase code coverage
Add support for workers without input
Extract common observables in works to a class

WorkObservables contains code that can be shared between the different
Work classes. Only implemented for the Work without input or output.
Make Work<TInput> implement IRegisteredWork<TInput>

Code shared with other Work classes in WorkObservables<TInput> is now
used also by Work<TInput>.
Make Work<TInput, TOutput> implement IRegisteredWork<TInput>

Add also some unit tests to cover triggering of works.
Add WorkBase class

Refactor common functionality of Works to a WorkBase class.
Make all Work classes derive from WorkBase.

Significant refactoring to move common code to base class.
Modify triggered work interface slightly
Add class for handling trigger error and complete events
Remove submit from triggered work interace
Rename WorkBase interfaces and classes to Work

Work implementations are now named action and func works, depending on
the worker type.
Fix incorrect file name in previous commit
Refactor WorkObservablesHelper class to be more understable
Extract common TriggeredWork functionality to abstract class
Fix method argument
Remove unnecessary comments
Remove unused TriggeredWorkState value
Remove unnecessary interface implementation declaration