[WIP] Add Rubi

TODO

* [ ] Add more stuff from Rubi:
    * [x] at least `cos`, `sinh` and `cosh` rules
    * [ ] hopefully some rational expressions like `sqrt(x)/(x+1)`
* [ ] Add pattern matching, so that one can pass a SymPy expression and it will determine if it matches any of the functions like `intsin12`, so that the interface is just like `integrate`
* [ ] Integrate this into `integrate` as an optional method (by default turned off for now), so that people can easily start playing with that and use it when it works
* [ ] Refactor the `is_zero()` into `sympy.utilities.randtest.test_numerically`, per the [comment](https://github.com/sympy/sympy/pull/8036#issuecomment-55971979).
That could be done with this patch:
```diff
diff --git a/sympy/integrals/rubi/tests/test_trig.py b/sympy/integrals/rubi/test
index 7821341..bf5b0b8 100644
--- a/sympy/integrals/rubi/tests/test_trig.py
+++ b/sympy/integrals/rubi/tests/test_trig.py
@@ -50,7 +50,7 @@ def is_zero(e, n=10, prec=100, a=10000, b=500):
         d = {}
         for j in range(len(symbols)):
             d[symbols[j]] = S(randint(-a, a))/b
-        if (abs(e.subs(d).n(prec)) > S(10)**(-prec)):
+        if (abs(e.evalf(subs=d, n=prec)) > S(10)**(-prec)):
             return False
     return True
 ```
Times with the patch:
```
certik@redhawk:~/repos/sympy(rubi)$ bin/test sympy/integrals/rubi/
============================= test process starts ==============================
executable:         /home/certik/repos/hashstack/hd_base/bin/python2.7  (2.7.6-final-0) [CPython]
architecture:       64-bit
cache:              yes
ground types:       python 
random seed:        52763743
hash randomization: on (PYTHONHASHSEED=435544027)

sympy/integrals/rubi/tests/test_trig.py[4] ....                             [OK]

================== tests finished: 4 passed, in 62.95 seconds ==================
```
versus without the patch:
```
certik@redhawk:~/repos/sympy(rubi)$ bin/test sympy/integrals/rubi/
============================= test process starts ==============================
executable:         /home/certik/repos/hashstack/hd_base/bin/python2.7  (2.7.6-final-0) [CPython]
architecture:       64-bit
cache:              yes
ground types:       python 
random seed:        1744541
hash randomization: on (PYTHONHASHSEED=596404783)

sympy/integrals/rubi/tests/test_trig.py[4] ....                             [OK]

================== tests finished: 4 passed, in 27.36 seconds ==================
```
So it's slower with the patch. Why do you think passing it as `subs` into the `evalf()` method is better?