Implement task model

* Builder now is easier to use by taking advantage of move assignment operator
  from the Task directly. 

  For example,

```
  Task task = Task::Builder::description("Hello World")
				            .deadline(tomorrow());
```
* Creating a task with empty description throws an exception.

* General improvement.
if the builder remembers its own state, then it can just return a `Builder&`