A strict and mostly obstruction-free Software Transactional Memory (STM) for .NET