Image support

@jakebolewski this is your image branch rebased against current master. 
What would be needed in your opinion to push this forward. The functionality worked great when I tested it some time ago.
That is true if the compiler can infer the type at the callsite, otherwise you rely on runtime dispatch which is much slower than a simple if statement.  The performance of this doesn't really matter, the time it takes to send the data to the GPU would dwarf the time it takes to exec this method :-)

But you are right, here `nchannels` will always be able to infer the correct type as it is only used in the inner constructor and the channel type will be statically known.