Use instances of Protocol instead of statics

 - Allows multiple connections
 - Improves the development of Cursor methods such as .limit() and
   .sort()
    - Each Cursor instance already receives (indirectly) a Protocol
      instance
    - The Cursor methods will each return new Cursor instances