Lazy dtype update

Fix for #1287, replaces #1290 and #1291.

Demo notebook:
http://nbviewer.ipython.org/gist/ocefpaf/4c81ca2d4a86c69e2026

@rhattersley Not sure if I merged things correctly.  A quick test with my dataset works :grin: though.