Further refactor cxa_guard.cpp

This patch is a part of a series of patches to cleanup
our implementation of __cxa_acquire et al. No functionality
change was intended.

This patch does two primary things.

It introduces the GuardObject class to abstract the reading
and writing to the guard object. In future, it will be used
to ensure atomic accesses are used when needed.

It also introduces the GuardValue class used to represent
values of the guard object. It is an abstraction to access
and write to the various different bits of a guard.

git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@357804 91177308-0d34-0410-b5e6-96231b3b80d8
(cherry picked from commit 45dccfe519d6ff73a41212f4f673ebafb196d688)

Bug: http://b/189279320
Test: treehugger
Change-Id: Ida958365f627587e353ab74dd0c8d74c8f36deaf
1 file changed