Abstracted I/O further

Semi-separated Input and Output now; each was made into its own abstract
class. Input was given all of the input methods from InputOutput and
Output was given putString() from InputOutput. Both classes have close()
methods as well. The InputOutput class is no longer abstract but instead
aggregates one Input object and one Output object. The type of Input
currently available is ConsoleInput and the type of Output currently
available is AudioOutput, which is handled by the FreeTTS library.