make encryption stream wrapper seekable

I refactored the encryption stream wrapper to make it seekable. This is
necessary to handel http range requests efficiently. With the old code
the Sabre webdav server would set the beginning of the range by
applying fseek on the unencrypted stream, which resulted in the pointer
set in the middle of an encrypted block and subsequently an error in
uncrypting the subsequent part of the string. After making the stream
seekable (with fseek applying on the unencrypted rather than the
encrypted string) the dav server can much more efficiently handle http
get operations on parts of large files.