Create conversation object

The goal for this pull request is to create an object that can be used to make managing conversations easier and more efficient.

I've also...
- Increased the selection of html characters that get converted to ASCII
- Fixed issue with while loop running forever because of recursive calls
- Updated the Engram selector algorithm to use the new conversation objects
- Seriously improved the modularity and maintainability of the codebase
Shouldn't `strftime` return a string?