Improve inference for InterpGrid & InterpIrregular

For some reason, Julia isn't statically determining that `ndims(A)` comes directly from `A::Array{T}`.  As such, the result of `@code_typed InterpGrid([1.,2.,3.], BCnan, InterpLinear)` was `::InterpGrid{Float64,N,BCnan,InterpLinear}`.  Once indexed, it lost all inference and became `::Any`.

The fix is simple: just grab `N` from the signature and use it instead of `ndims(A)`.
Allow irregular interpolation with differing types

This relaxes InterpIrregular grids to allow their grid and coefs to be of a different type.  This allows, for example:

    julia> InterpIrregular([1.,2.,3.], big([2.,3.,4.]), 0., InterpLinear)[1.5]
    2.5e+00 with 256 bits of precision

    julia> InterpIrregular([1.,2.,3.], big([2.,3.,4.]), 0., InterpLinear)[1.5:2.5]
    2-element Array{BigFloat,1}:
     2.5e+00
     3.5e+00
Merge pull request #34 from mbauman/grid-inference

Improve inference for InterpGrid & InterpIrregular