Header only macro powered reflection for C++