Added implementation note

Apparently, calling both ObjectInputStream constructors before calling
an ObjectOutputStream constructor can deadlock the programs (because
each constructor is waiting for a serialization header that must be sent
by the OOS).

Noted.
Add StreamQueueProxy

This class encapsulates the process of object I/O from serialization
streams. Hopefully, this will make the process of communicating between
the applications a bit easier.
Add comments on my approach to handling exceptions

Some of the exceptions that are thrown are to be expected in normal
operation, so I've added reasoning for why several of the catch blocks
are empty, and explanations behind each potential exceptional condition.
More precise I/O error messages for the user