The intent is to provide a header that can be included by other headers
without introducing too much pollution. smr.h depends on various
headers and will likely grow over time, but is less likely to be
required by system headers.
Move SMR assertion macros to _smr.h. I don't think they belong in
smr_types.h, but smr_types.h macros rely on them.
Rename SMR_TYPE_DECLARE() to SMR_POINTER(). There are two motivations
for this: 1) One might use SMR to protect more than just pointers; it
could be used for resizeable arrays, for example, so TYPE seems too
generic. 2) It would be nice to be able to define anonymous pointer
types, akin to TAILQ_HEAD/_ENTRY, and the _DECLARE suffix makes that
look wrong. I think
struct foo { SMR_POINTER(struct bar *) p; };
is nicer, and one can write
typedef SMR_POINTER(struct bar *) smrbar_t;
if that happens to be useful.