Tentative structure [WIP] for interfacing Arb

This PR can be used to facilitate discussion on how to interface Arb in CSymPy. If this doesn't require a lot of polishing, let's continue future work on this, else start-over on a different PR. 

Main changes:

+ Added method n() to `Basic` class which evaluates the instance by
  calling `eval()` function.
+ Two new files were added, `eval.h` and `eval.cpp`, which contain
  the functions for evaluating CSymPy types. These files contain main
  evaluation function `eval()` and support functions.
+ `eval()` is a if-else chain that calls the correct support function
  by checking the input instance type.
I run into the same issue with the double evaluation in the Visitor PR. Essentially, `double` can only store real numbers, not complex. The `complex` type in C++ must be used for complex numbers, but it is slower for real numbers (obviously). So I think the conclusion is to implement one evaluator just for real numbers, and then another one for complex numbers. The complex will also work for real numbers, but it will be slower. The real evaluator will raise an exception if a complex number is encountered.

I would do exactly the same thing for Arb.