Added documentation and some exception handling. Also added a static method for compressing and decompressing and added an interface for listening to progress.