Fix return type of .+ and .- on Bool arrays

For example, now [true].+[true] is the same as [true]+[true], i.e. [2]
As for Arrays, this is obtained by special-casing Bools.
Rename the internal broadcast!_function

renamed as gen_broadcast_function, since its purpose is
different from the exported version
Broadcast elementwise comparison operators

Closes #5877

This also specializes broadcast! when the target is a BitArray
and adds an (unexported) bitbroadcast function which creates a
BitArray target rather then an Array.

Also, some comparison operations between AbstractArray{Bool} are
specialized if possible.
Broadcast .^ for BitArrays

also specialize Bool^Integer while at it
Broadcast ./ for BitArrays

simply by removing a method!
Broadcast .* for BitArrays

addresses #3171
Broadcast: use start/next for Arrays/BitArrays

introduces specialized versions of the broadcasting
core which use start/next instead of cartesian iteration.
Used when the arguments only involve Arrays or BitArrays.
Export bitbroadcast
fix #5536, specificity bug in varargs methods
Merge pull request #6035 from JuliaLang/cb/bitbroadcast

BitArray broadcasting
Update helpdb.jl
Export bitbroadcast from Base
Remove Array+-Number methods. Define UniformScaling and the identity operator I. Let Number/Matrix be the inverse. Update docs.
Merge pull request #5810 from JuliaLang/anj/arraydiv

Restrict +,- and / to algebraic operations (for matrices). Use . versions for elementwise operations. Add UniformScaling matrix.
grammar