Foundations for registering task custom callbacks

I've laid some foundations for #3. 

- Equals and hash code are removed from Task
- ObservableTask is a task proxy that resides in execution graph