Redid exception processing
In a previous attempt, we tried to do string parsing to obtain the error message and use it in the IOException. It however turns out that this message is not as consistent as we hoped, so this parsing method doesn't work, and causes a different exception, making the original exception not visible from the perspective of the library user.
This MR simplifies this, to the original message. I talked with Brian and this seemed like the best solution. Though some implementation information does leak, it should be contained within the companion container and not be shown to the user. Messages will look of the form: [88] Socket operation on non-socket
, which should be an acceptable message when wrapped in an IOException.
Also upgraded Gradle to fix a bug where I couldn't run the Gradle wrapper from WSL.