Move file into storage dir

To be consistent with the namespace.
file::mkdir: set default permissions
storage: add rmdir function
process: make I/O redirection conditional

Due to un-implemented stream move semantics in GNU's libstdc++, the
process class can only be built with LLVM's libc++.
If the I/O redirection is not required, one can define NO_PROCESS_STREAM
macro and use it libstdc++.
Add initial alsa bits
alsa::device: add read and write functions
alsa::device: add a few more bits
alsa::device: update

Remove set_* functions and replace them with single set function.
Add frame_size function.
Tweak read and write functions.
Add recover function.
alsa::device: remove unneeded header
alsa::device: don't throw inside recover
storage::file: add sync and direct options
storage::file: use underlying constants/macros

BUG: This fixes bug in open_opt, which had "overlapping" values.
storage::file: ssize_t -> size_t

We don't need ssize_t, as we don't use negative values to return errors.
storage::file: add truncate function
Add a few helper functions
storage::file: add readline, getline and eof functions
enum: ENUM_OPERATOR -> DECLARE_OPERATOR

Update example.
enum.h -> enum.hpp
Add string.hpp

And move string related functions into it.
utility.h -> charpp.hpp

String related functions were split off into string.hpp