Incremental Schreier-Sims algorithm.

It is used to extend a sequence of points and a generating set
to a base and strong generating set relative to it.
Tests for incremental Schreier-Sims algorithm.
Remove redundant strong generators from a strong generating set.

Via the function _remove_gens in sympy/combinatorics/util.py
Subgroup search and tests for _remove_gens.

The function subgroup_search is used to find a strong generating
set for the subgroup of all elements satisfying a given property
within a group.
Added tests for subgroup search.
Removed the use of baseswap from subgroup search; minor changes.

Due to a bug in the version of subgroup_search using baseswap
to perform the base changes, the way basic stabilizers are
obtained is now via the stabilizer() function. The function
_insert_point_in_base was remove from sympy.combinatorics.util
since it's not needed right now.

Also, made the incremental Schreier-Sims algorithm exclude the
identity element as a generator and wrote some more tests
for subgroup_search
Removed unnecessary code from subgroup_search.
Added docstrings for the new functions.
Minor style improvements.
Got rid of lines longer than 80 characters.
Renamed all variables `distr_gens` to `strong_gens_distr`.

For more clarity, as suggested by my GSoC mentor David. This
variable is usually used to denote a list of strong generators
distributed by membership in basic stabilizers.
Fixed some issues with the docs.
Removed side effects from schreier_sims_incremental.
Fixed an error in kinematic differential equations.
Merge pull request #1454 from amakelov/week9

Incremental Schreier-Sims algorithm, and subgroup searching.
Merge pull request #1469 from angadhn/kanechanges

Fixed an error in kinematic differential equations.
_sorted_args defined for Add, Mul, Atom

The addition for Atom is a safeguard against assuming that you
still have the same expression at some point in the code when
in fact it may have become an atom.

e.g.

args = nonatom.args, e.g. (1, x + 1)
...simplification or modification -> newargs, e.g. (1,)
canonical = nonatom.func(*newargs)._sorted_args, e.g. ()

If nonatom.func(*newargs) is an Atom, the code that follows
that wants to process the canonically ordered args will find
that the arg is now gone since the rebuild object had no args.
randomization: combsimp

The result obtained from combsimp is dependent on the order of processing
in several places (as indicated by the use of sorted and _sorted_args).

Now, although the answer may not be optimal, it is canonical.

e.g., here are 2 equally valid answers that are obtained depending on
the order of processing:

>>> a
3**(3*x + 1/2)/(18*pi*gamma(3*x - 1))
>>> b
3**(3*x - 3/2)/(2*pi*gamma(3*x - 1))
>>> [w.subs(x,2).n() for w in (a,b)]
[0.930367511024274, 0.930367511024274]
combsimp: new mult_thm algorithm

- no simplification of differences is done
- this routine does not depend on the terms being sorted

You can see the failure of the implementation before this commit
by changing _sorted_args to args in

newargs = list(cexpr._sorted_args) if not cexpr.is_Atom else [cexpr]

and running tests in 2.7 with PYTHONHASHSEED=4251385681

The result obtained for the test at line 1091 in test_simplify will
be different and if you check the value at x=2 you will see that
it does not agree with the value of the original expression.
combsimp: rf(foo, 0) == 1; add other tests for coverage

The 3 lines still uncovered are the inner ifs of the find_fuzzy g and 1/g
blocks and both ifs of the fuzzy 1/(g - 1) block.