Fixed an irritating edge case in the proof detection fallback code

In an attempt to handle all of the weird ways proofs can start, Coqoon
(almost always) assumes that sentence pairs of the form "Whatever. Proof."
begins a proof. Prior to this commit, even a comment before a "Proof."
would trigger this behaviour, wrongly opening a second proof block
Made it possible to create IDetachedCoqVernacFiles with no backing resource

I have a sneaking suspicion that the cache will interact badly with this
kind of abstract model object, since we rely on parents and resources to
look up cache entries. For the moment, I avoid this problem by creating a
new fake model hierarchy every time an unbacked file is created
Added support for reindenting blocks of code

This doesn't work for nested code blocks yet (they'll be reindented as if
they weren't contained within anything), but that should be implemented
very shortly
Moved lots of the block indentation code into a companion object
Made the block indentation code treat section-ending sentences properly

Coqoon doesn't distinguish between section- and module-ending sentences, so
this commit makes the latter work properly as well
Only perform block indentation on complete sentences

This is a sensible safety precaution that should stop sentences being
partially mangled or erased
Changed the way the auto-indentation code examines the previous sentence

The auto-indentation code now examines the whole sentence, including
whitespace: this makes it possible to avoid mangling lines containing
several sentences
Find the initial indentation level for block indentation by cheating

The code now actually internally indents everything up to and including the
selected region, but only the selected region is ever replaced
Keep any initial whitespace when performing block indentation

This stops blocks from suddenly moving up to the previous line after
they've been indented