A library-based Software Transactional Memory (STM) for Scala, coupled with transactional sets and maps