Mark the free functions as inline in order to avoid multiple definitions.
Added atomic::compare_exchange_weak() and operators.

atomic::compare_exchange_weak() falls back to atomic::compare_exchange_strong(). This is not the most efficient implementation but functionally correct. Future work can easily provide a more efficient solution without breaking user code.

The read-modify-write operators (+=, -=, &=, |=, ^=) make the atomic behave like integral types.
Bugfix: The clone methods for small and large functionals have been reversed.