fix issue reported in #95 and improve the typechecking of the xyz setter

Ensure that if xyz is set with a np.matrix or an np.array, that we still get the right results. Thanks for the tip, @dermen

the xyzsetter code is now using utils.arrays.ensure_type, which handles the nitty gritty.