Looking at the code, I am not quite sure that you interpret loading/storing flag correctly. It really is just a flag for serialization routines...
I think I would not bother implementing SetLoading / SetStoring in PipeStream. I believe that in typical scenario, only either input or output will do serialization, so it makes sense to set in just for single end of pipe... In that case, what is already in Stream should be enough.