Make f, d, def actual let variables in test/collections.jl (fixes #5470)

When test/core.jl, test/collections.jl, and test/remote.jl are all
run on the same core, a global variable :f is defined in test/core.jl
in the test for issue #2619, which was then redefined inside of a let
block by the (recently added) `get!` test in test/collections.jl,
which was propagated to test/remote.jl and caused #5470.

This commit makes f an actual let variable, after which f does not
seem to be global in test/remote.jl, and the local def works.
No, the GC stack is not in fact a constant

Fixes remaining MCJIT issues on OS X. I'm not exactly sure what LLVM did
in this case, but I know it can't be good. I'm actually surprised this works
some of the time. You wouldn't believe how much time I've spent tracking down
this one misplaced bit!
bitarray indexing: sync with array + refactor

* Use setindex_shape_check and DimensionMismatch instead
  of generic errors; this (and a couple of extra minor fixes)
  makes BitArrays behave like Arrays (again)
* Move portions of the indexing code to multidimensional.jl
* Restrict signatures so as to avoid to_index and convert, then
  create very generic methods which do the conversion and the
  dispatch: this greatly simplifies the logic and removes most
  of the need for disambiguation. Should also improve code
  generation.
bitarray: more systematic indexing tests
bitarray: small code simplifications

follows change in bitshift operators behavior
(i.e. saturating instead of modular)