Add Image widget

...why hasn't anyone written this before?

Closes #350