Implement CommandType enum

Issue #65 - https://github.com/cs2103aug2014-f11-3j/main/issues/65

Why is this change necessary?
For a general Command object, a field is needed to identify the precise
command type. For example, "add something" is a command and can be
represented as a Command object. However, to execute this add command,
one needs to know that it is an add command, i.e. we somehow need a way
to tell the execution method that the Command object is an add command,
as opposed to a delete command.

How does it address the issue?
A command type can be represented by a CommandType enum in the Command
object. One just has to access the commandType field of the Command
object. For those who wonder why a new class for every type of command
is not created, the reason is that the command log in the Database class
does not differentiate among command types. Furthermore, many commands
are associated with tasks, thus it may be useful to have a general
Command class storing with associated tasks. Polymorphism is possible,
but having a field to identify the command type is by far the simplest
solution.

What side effects does this change have?
- UserInterface class will need to fill in the commandType field in a
  Command object when parsing user commands.
- Logic class will identify the command type through the commandType
  field and execute it appropriately.
Implement Task field within Command class

https://github.com/cs2103aug2014-f11-3j/main/issues/65

Why is this change necessary?
Many commands manipulate a specific, associated task. A method to
retrieve the associated task easily is needed.

How does it address the issue?
Storing a Task field within the Command class allows for easy retrieval
via the relevant getter.

What side effects does this change have?
All components except GoogleCalendarManager:
- UserInterface parses tasks into Command objects and passes them to
  Logic.
- Logic manipulates and executes Commands based on the stored task in
  the Task field.
- No need for Database class to have 2 arraylists to store the commands
  and tasks separately
Partially implement execution/undo Command methods

Issue #65 - https://github.com/cs2103aug2014-f11-3j/main/issues/65

Why is this change necessary?
Commands need to be executed and undone, and the behaviour from
executing and undoing them depends on the actual command and its
associated task.

How does it address the issue?
Having an execute and undo method within the command allows for easy
retrieval of necessary information like the command type, task to be
manipulated etc.

What side effects does this change have?
Logic must implement these methods. However, these methods are just a
suggestion; Logic can implement execution and undoing of tasks however
he wishes.