Use SFINAE to only cast away volatile when necessary.

Also clean up namespace and symbol exposure.

Change-Id: Ic32e0181e1a293998361667db1c5461026f8d3a4
Provide clearer name with SFINAE

Change-Id: I19d1f32929d1a3adfe756659d93880c2917f2dd2
Merge pull request #137 from awong-dev/support-gcc47-atomics

Use SFINAE to only cast away volatile when necessary.