Improve docs on some basic headers.
type_traits: improve SelectBySize error reporting.

Previously, if SelectBySize could not find a type of the given size
in its parameter list, it would hit a base case where the template
was not specialized -- producing the stereotypical cascade of template
error messages.  In GCC the most specific message was something like
'invalid use of incomplete type'.

Here, I've added a base case that terminates recursion in a static
assert with a more readable error message.

Notice that the base case still takes a single type parameter --
i.e. it does not completely exhaust the list before reporting.  This
is to ensure that the static_assert is conditional on something.
Otherwise, it will fire on every compile.
Don't assume that address unit is 8 bits.
type_traits: reorganize header.
types: leverage Signed/UnsignedIntOfSize templates.

This header duplicated some logic that I had already factored into
type_traits.
Change include guard convention.

Moving the include guards into the ETL-internal macro space takes them
out of completion suggestions in smarter editors, which is nice.

I've decided I like Boost's convention of ending guards in _INCLUDED,
to make the role of tests against such guards more obvious, so I've
adopted that at the same time.
data: don't pun 0 as nullptr.