Add fake record id provider that ensures no duplicate ids

This adds a fake record id provider that ensures no duplicate
ids are used for records. This can cause inconsistent behavior
in tests and doesn't match AR's behavior. This uses a provider
per fake record class that generates ids by incrementing a
counter. This counter is thread safe as well.