Split out io_file_t
Split out io_buffer_t, make input_redirect in exec() a raw pointer
Convert io_buffer_destroy to ~io_buffer_t
Convert io_buffer_create to static io_buffer_t::create, make io_buffer_t constructor private
Add missing virtual qualifier to ~io_buffer_t
Convert io_buffer_read to io_buffer_t::read
Split out io_pipe_t, let io_buffer_t inherit it
Make io_data_t pure virtual, its constructor protected
Make io_buffer_t::out_buffer a raw pointer, initialize in io_buffer_t's constructor
Make is_input a member of io_pipe_t
Make io_data_t::io_mode const

A protected constructor is needed in io_pipe_t to let io_buffer_t override
its io_mode.
Revert "Make io_buffer_t::out_buffer a raw pointer, initialize in io_buffer_t's constructor"

This reverts commit d48ffab9d67da48cf45c2f5560c21a767144545f.

Conflicts:
	io.cpp
	io.h