refactor(logger): add a logger to handle all printing and writing to stdout

@hankduan could you take a look? Doing this as the basis for having different logging options (e.g. warn, output only if in troubleshooting mode).
what about `setLevel(level)` instead of passing the whole config so people know what set is doing without having to read this file.