yeah calibre has an LRF viewer, its called lrfviewer
I can't think of any HTML markup that would force a caption to be on the same page, but what you can do is add a bunch of blank lines before the image and after the caption to make it clear that they belong together. Use <br> for that.
Putting in the HTML entities will work for curly quotes.