Overhaul of adobe::name_t

Note that this is still a standing pull request - adobe/name.hpp and its source are unchanged in this branch as of yet. All the work is currently being done in test/name_overhaul/ for the moment. I'll work on migrating the new name_t over soon.

Summary
---

 - `aggregate_name_t` has been removed, as I felt `static_name_t` was a more accurate name for exactly what's going on in that class now.
 - `_name` is a user defined literal that will construct a `static_name_t`, like so:

        adobe::static_name_t foo("foo"_name); // OK
        adobe::name_t           bar(foo); // OK
        adobe::name_t           baz("baz"_name); // OK
 - Note that you *cannot* create a `static_name_t` any way other than through the user defined literal.
 - `static_name_t`'s hash is a hash of the *string* value, whereas `name_t`'s hash is a `reinterpret_cast` of its unique string pointer in the string map. (This is easily apparent in the test app output.)
 - `static_name_t` will hash its string at compile time, making for an average-case `O(1)` conversion to `name_t`.
 - `name_t` is holding onto a `std::unordered_map` on the backside that maps from a `name_t`'s hash to its string. When a `name_t` is constructed, its hash is used to find the unique string pointer common to all `name_t`s with that same string.
 - `name_t::operator==` does pointer-only equality comparison.
 - `name_t::operator<` uses `std::strcmp`, so produces lexicographical sorts. `name_t::fast_sort` is provided to sort based on the hash of the `name_t`.
 - `operator bool()` is explicit for both `static_name_t` and `name_t`, and return false only when equal to the empty string.

Test App Output
---
    Built with ADOBE_NAME_DEBUG=1

    hash: 0x38d1334144987bf4
    "Hello, world!"_name should hash to 0x38d1334144987bf4:
    [ 'Hello, world!', 0x38d1334144987bf4 ]
    hello_world (N5adobe13static_name_tE): [ 'Hello, world!', 0x38d1334144987bf4 ]
    foo (N5adobe13static_name_tE): [ 'Red Sox', 0xc5746070bacfea32 ]
    bar (N5adobe6name_tE): [ 'Red Sox', 0x0x101b29145 ]
    baz (N5adobe6name_tE): [ 'Cardinals', 0x0x101b2914d ]
    nullname (N5adobe6name_tE): [ '', 0x0x101b29157 ]

    static_cast<adobe::name_t>(foo) (N5adobe6name_tE): [ 'Red Sox', 0x0x101b29145 ]

    foo == bar: true
    foo != bar: false

    foo == baz: false
    foo != baz: true

    bar == baz: false
    bar != baz: true

    foo < bar: false
    bar < foo: false

    foo < baz: false
    baz < foo: true

    bar < baz: false
    baz < bar: true

         foo is null: false
    nullname is null: true

    Before slow sort:
      [ 'fig', 0x0x101b29255 ]
      [ 'apple', 0x0x101b29259 ]
      [ 'banana', 0x0x101b2925f ]
      [ 'eggplant', 0x0x101b29266 ]
      [ 'grape', 0x0x101b2926f ]
      [ 'horseradish', 0x0x101b29275 ]
      [ 'daikon', 0x0x101b29281 ]
      [ 'carrot', 0x0x101b29288 ]
    After slow sort:
      [ 'apple', 0x0x101b29259 ]
      [ 'banana', 0x0x101b2925f ]
      [ 'carrot', 0x0x101b29288 ]
      [ 'daikon', 0x0x101b29281 ]
      [ 'eggplant', 0x0x101b29266 ]
      [ 'fig', 0x0x101b29255 ]
      [ 'grape', 0x0x101b2926f ]
      [ 'horseradish', 0x0x101b29275 ]
    Before fast sort:
      [ 'eggplant', 0x0x101b29266 ]
      [ 'horseradish', 0x0x101b29275 ]
      [ 'daikon', 0x0x101b29281 ]
      [ 'banana', 0x0x101b2925f ]
      [ 'carrot', 0x0x101b29288 ]
      [ 'grape', 0x0x101b2926f ]
      [ 'apple', 0x0x101b29259 ]
      [ 'fig', 0x0x101b29255 ]
    After fast sort:
      [ 'fig', 0x0x101b29255 ]
      [ 'apple', 0x0x101b29259 ]
      [ 'banana', 0x0x101b2925f ]
      [ 'eggplant', 0x0x101b29266 ]
      [ 'grape', 0x0x101b2926f ]
      [ 'horseradish', 0x0x101b29275 ]
      [ 'daikon', 0x0x101b29281 ]
      [ 'carrot', 0x0x101b29288 ]

    EXIT STATUS: 0