Added `pi` in `Symbol`.

Now `pi` can be used everywhere, just like `zero`,`one` etc
Added sine lookup table
Updated TODO's
Updated definition of `get_pi_shift`

Currently, it returns `true` if we find the `arg` is of form:
`n*pi/12` and also returns back `n`.
In all other cases it returns false.
Added tests for get_pi_shift
Updated `get_pi_shift` and added its references to sin

Updated get_pi_shift so that it checks the dict to match symbol pi
and makes sure the arg is of form n*pi/12 where n is an integer.
Also updated the is_canonical and sin functions to use the
`get_pi_shift`. So now, on calling sin if the arg is of form
`n*pi/12` its value is returned instead of creating an instance
of sin.
Added tests to check direct evaluation of sin

Fixed a minor bug in sine_table.
Added tests to check the evaluation of `sin(n*pi/12 + k*pi)`
where n,k are integers
Updated `isqrt` to `sqrt`

`sqrt` has been defined as `pow(arg, div(one, two))`
Removed TODO's corresponding to `sqrt`
Updated rules for all trignometric functions

Updated all the trignometric functions so that, lookup table
is referred first before creating the object
Added a function `test_shift()`

`test_shift()` improves the original `get_pi_shift()` to
recognise args of form `arg = x + n*pi/12` as opposed to
`arg = n*pi/12` which is currently recognised.

`get_pi_shift()` will be updated to this after adding some
rigorous tests.
Fix Bug in `test_shift`

Fixed a minor bug, corresponding to value of `n` returned in
the case with 2 members in the add dict
Refactored test_shift to get_pi_shift, added tests

The previous get_pi_shift has been updated to recognise
arguments of form `theta + n*pi/12`. It returns `theta`, `n`
and a boolean to confirm if the given argument matches the pattern

Quite a few tests have been added to check consistency of the new
version of the function.

The previous occurences of get_pi_shift have been updated
to the new function definition.
Shifted base class to `TrigFunction`

The base class has been shifted to `TrigFunction` class.
Currently I've kept the `arg` as public member to avoid calls to
getter and setter in child methods.
The hash function which is same for all the classes has been
transferred  to the `TrigFunction` class.

Fixed a couple of indentation issues
Refactored `get_pi_shift` according to style_guide

Updated the parameters of get_pi_shift.
Now the function definition looks something like this:
bool get_pi_shift(const RCP<const Basic> &arg,
		 int &n,
	         const Ptr<RCP<const Basic>> &x);
Fix Travis Build Failure

Added get_arg in the FunctionSymbol which was removed in the
previous commit. Should fix the build error.
Refactored get_pi_shift.`n` passed as `Ptr<RCP<const Integer>>`
Added and tested `handle_minus`, Added `eval`

The `handle_minus` in turn calls `could_extract_minus`.
New function has been added in rational, `is_positive` and
`is_negative` which were required by `could_extract_minus`

Tests have been added for `could_extract_minus`.
`eval` has been added, tests need to be added.
Fixed bug in `eval`, Updated `sin` to use eval

More tests need to be added to check `sin`, all the earlier tests
pass.
Fixed bugs in `eval`. Added `tests` for `sin`

Fixed a couple of errors in `eval` and `sin`
Added more tests in `test_sin`. `eval` looks good to be merged.