cpp: RTypesI: use static locals in place of duplicated globals

This fixes a few instances of variables being defined *in headers*, rather than simply being declared.  This results in them being defined in every translation unit including the header, which is obviously wrong.  They are now only declared in the header, and defined once.  Some are moved directly to local statics so they are defined once at the site of use.  (The previous behaviour did use unit-local linkage since they are const, but it's still unnecessary duplication.)

Testing: run the unit and integration tests; they might pass if you run them enough times (something is broken outside this PR)

Note: may possibly fix some of the rtypes bugs; the same value can only have a single address now, rather than one per translation unit.
Sorry I haven't had much time to think about this. Would another option be to just make them `extern` in the header then?