Set direct=True on missing metadata (See #10618)

Rather than throw an InternalException, ThumbnailCtx
now throws a NoThumbnail (caught) exception. Either
this is turned into a ValidationException or another
method is used to synthesize a Thumbnail (at the cost
of more overhead)
Refactor into handleNoThumbnail for read-only issues (Fix #10618)

After the last fix, 2 tests were still failing when root tried to
access thumbnails. Now all 24 tests are passing.