Race Detection

## Overview

This pull request adds race detection to the test suite and a functional test to simulate multiple readers trying to execute while writer transactions are being executed.

One bug was found where transactions were using the original metadata reference instead of copying it so it was getting overwritten if writers went too fast.

The race detector didn't find any race conditions in the code. It does trigger a warning occasionally on a `WaitGroup` in the test case if a sleep is not executed after the writer transaction is complete. I think there might be some kind of scheduling starvation issue since the writers run in a single for loop. I need to try to upping the parallelism in the test suite.