blkin: allow delayed Trace initialization

to make Trace easier to use on the stack and compose within data
structures, allow them to be default-constructed and initialized later

new function valid() and accompanying operator bool() return false
on default-constructed Traces until an init() function is called

name and ip strings are no longer copied into std::string by default,
under the assumption that string literals will be used in the majority
of cases.  new copy_ip() and copy_name() functions are available to
handle cases where temporary strings are involved, and need to be stored
for the lifetime of Trace

Signed-off-by: Casey Bodley <casey@cohortfs.com>