Improve Printable and Convertible concept.

The old Printable concept relied on two functions, print() and render(),
which had to work in a complicated way in conjunction. This commit replaces the
old API with a newer, simpler API. Any type that models the Printable concept
only needs to provide one free function:

    template <typename Iterator>
    trial<void> print(T const& x, Iterator&& out);

When providing this function, the framework will inject new functions:

    - basic_ostream<C, T>& operator<<(basic_ostream<C, T>& out, T const&);

    - template <typename From>
      std::string convert(From const& from, std::string& str);

Moreover, one can now rely on a new conversion function:

    template <typename To, typename From>
    trial<To> to(From const& from);

For that function to get activated, on needs to provide the following
conversion function:

    - template <typename To, typename From>
      trial<void> convert(From const& from, To& str);

For any Printable type, the framework also generates a conversion function to
std::string automatically.

This commit also cleans up other APIs:

    - The class util::error now has a variadic contructor, which attempts to
      print each argument in the contained string. That is, each argument must
      fulfil the Printable concept.

    - The function util::trial<T>::failure() got renamed to
      util::trial<T>::error().

    - The trial<nothing> idiom went away. The new idiom is trial<void> and one
      returns 'nothing' instead of 'nil' to indicate success.

    - The exist several convenience headers which hoist functionality from the
      util namespace into namespace vast, e.g., vast/trial.h or vast/error.h.