ENH: Type specific binary search functions for `searchsorted`

This PR replaces the generic binary search functions used by `searchsorted`
with type specific ones for numeric types. This results in a speed-up of
calls to `searchsorted` which is highly dependent on the size of the
'haystack' and the 'needle', with typical values for large enough needles
in the 1.5x - 3.0x for direct searches (i.e. without a `sorter` argument)
and 1.2x - 2.0x for indirect searches. A summary benchmark on float and
int arrays can be found [here](https://gist.github.com/jaimefrio/8704101).

Furthermore, the type specific binary search functions can take strided
inputs for all their arguments, which is a step in the right direction to
eventually add an `axis` argument to `searchsorted`.
- Modified resetting of binary search indices when multiple keys are being
  searched, following @juliantaylor's suggestion. This speeds up searches of
  ordered keys by a lot (up to 3x), but slightly slows down purely random
  keys. Some benchmarks are available [here](https://gist.github.com/jaimefrio/8704101#file-gistfile2-txt)
- Added tests for proper handling of the smart index resetting when the last
  key was larger than all items in the searched array.
- Added basic tests for all implemented dtypes.
- This last change unearthed a funny behavior of `PyArray_CheckFromAny`,
  which was changing the byteorder attribute of `NPY_UBYTE` from `NPY_IGNORE`
  to `NPY_NATIVE`, and triggering lots of failures in `np.core.test()`. So I
  modified `PyArray_CheckFromAny` to leave `NPY_IGNORE` byteorders alone.
- Removed the now unused binary search functions from `item_selection.c`.
- Modified generic searches to take a PyArrayObject and use its PyArray_DESCR
  to fetch a compare function, rather than the global state function that
  the sort functions take.
- Added get_genericbinsearch_func and get_genericargbinsearch_func to
  npy_binsearch.h.src, to get a function pointer to the right generic type
  search function. This makes the code in item_selection.c easier to follow,
  I think.
- Littered PyArray_SearchSorted with comments with my ref counts for dtype,
  hopefully I got it right this time.
- Refactored code, to have type specific and generic binary search functions
  share signature. `get_(arg)binsearch_func` now handles finding the right
  function for all cases, making it transparent to `PyArray_SearchSorted`.
- Reordered types in `(arg)binsearch_map` to be sorted by type num. Since
  the function is searched using binary search, this is a requirement. Only
  `npy_half` was out of place. Added comment to remind future expansions.
- Corrected reference counting for `dtype` in `PyArray_SearchSorted`.
- The requirement for a coniguous `sorter` array had been dropped, but the
  stride for it was set to the element size. This created an opportunity for
  a very unlikely bug, that is now corrected. Added test to verify it.
- Removed unused includes from `binsearch.c.src` and `npy_binsearch.h.src`.
- initialize `last_key_val` to first value in `key` to avoid compiler warnings.
- removed unused `store_arr` variable from `PyArray_SearchSorted`.
STY: adapted code to `C_STYLE_GUIDE.rst.txt`
ENH: add tobytes and stop using tostring in documentation

tostring returns bytes which are not equal to string, so provide a
tobytes function alias.
tostring does not emit a deprecation warning yet so rdepends do not need
to check two names to support older versions of numpy without warnings.
MAINT: Added `NPY_VISIBILITY_HIDDEN` to binary search functions in
       `binsearch.c.src` and `npy_binsearch.h.src`.
DEP: Deprecate boolean `-` operations

Boolean - is not well defined, especially the unary and
binary operator are not compatible. In general boolean
minus seems to have no real application and does not do
what might be expected.

All "allclose" type functions (numpy, tests, masked) have to
now check for boolean to avoid the deprecation warning. In
the future one could think about removing it again and just
allowing the upcast.
MANT: Minor style corrections, `get_(arg)binsearch_func` is no longer inline.
DOC: Added note on `doc/release/1.9.0-notes.rst`
DOC: Fix typo in a dsplit() error message.
BUG: fix shuffling of flexible dtypes and masked arrays

closes gh-4270 and gh-3263
also regenerate with cython 0.20.1
Merge pull request #4290 from ceball/dsplit_errmsg

DOC: Fix typo in a dsplit() error message.
TST: bootstrap chroot in tmpfs

during bootstrap eatmydata is not available in the chroot so it takes a
significant time. Avoid this by placing the whole chroot in a tmpfs
ramdisk.
Merge pull request #4286 from juliantaylor/flex-shuffle

BUG: fix shuffling of flexible dtypes and masked arrays
Merge pull request #4244 from jaimefrio/binsearch

ENH: Type specific binary search functions for `searchsorted`
Merge pull request #4292 from juliantaylor/ramdisk-chroot

TST: bootstrap chroot in tmpfs
BUG: fix NULL dereference on longdouble conversion error

Closes gh-627
Merge pull request #4294 from juliantaylor/fix-longdouble-int

BUG: fix NULL dereference on longdouble conversion error