changed _read() to improve performance

buff is now a list of strings which gets concatenated into a single string at the end of a successful run.

Having buff as a list, instead of a string, avoids a lot of memory-to-memory writes from concatenating multiple strings into a really long string. This alone can have a huge performance impact on some plugins (kdbgscan, for example).