bessel.py: implement missing expansions of besseli/j/y/k for (half-)integer nu

    * besseli/j/y/k: _eval_expand_func() does rewrite for
      nu.is_integer, using reccurence relations
    * besseli/j/y: _eval_expand_func() does rewrite
      for (nu + S.Half).is_integer as jn/yn
besseli/j/k/y: major rewrite for eval() methods:

    * add parity symmetries for nu
    * work with nu.is_integer, not just nu.is_Integer
    * add some known values
    * add generic symmetry in z for besseli/j
besselsimp: apply expand_func for besseli/j if nu is integer > 1 (issue 3055)
bessel.py: add references to functions.wolfram.com
BesselBase: add _eval_conjugate() method (with override for hankel1/2)
bessel.py: reorder _eval_rewrite* methods
bessel.py: more rewrite for besseli/j/y/k
bessel.py: changed docstring formatting for references
More rewrite (besseli -> jn, besselk -> yn), implement expand_func for generic (real) nu
Implement _eval_expand_func() for BesselBase
Additional numeric tests (expand, conjugate) + minor reformatting
Some cleanup for test_bessel.py:

    * don't select random numbers by hand in tests
    * test expand_func both numerically and
      symbolically with check() helper
Reduced the number of permutations of mapping by not generating cases where mapping[-1] != x
While earlier the number of terms or components of a function being permuted were (say) n after these changes they have reduced to n-1, thus i$

passed the tuple variable across functions instead of storing it on function