JAVA-1510

Summary:

1. Added synchronous and asynchronous protocol methods to Connection, which allows Server implementations to process protocol-level errors like "not master" before throwing them to the caller.  
2. Since Connection is an interface, this will allow us to substitute different implementations (like talking to an HTTP-based proxy server) in the future
3. Removed byte-oriented send and receive message methods from Connection 
4. Moved protocol and message classes into com.mongodb.connection and made them package-private
5. Moved write request classes to com.mongodb.bulk
6. Removed use of GetMore and ServerCursor classes in Connection, to be consistent with the other methods