Better translation of `IStream::Seek` errors in stream wrapper.

`IStream::Seek` specifies `STG_E_INVALIDFUNCTION` for errors caused by invalid origin or offset.  These are logic errors so we translate `std::logic_error`s to `STG_E_INVALIDFUNCTION`.  Of course, the C++ stream implementation may throw something completely different in those situations, in which case we continue to return `E_FAIL`.