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.
The linter complains because it thinks that `&&` is an AND operator. Forget to remove the NOLINT there.