AbstractDiscreteAllocMemory._read() speedup

Instead of building buff from successive concatenations (which result in a lot of memory-to-memory writes), buff is build as a list of strings, which is concatenated once when the functions returns.
 In _read() intensive plugins, or when reading large chunks of data, this results in noticeable speedup.