Some improvements on the code and structure

* Code style, spaces and other improvements
* All tests passing
* Bin cleaning
* test/case dir was created to maintain files for cases isolated
this way you're setting a obj property with a null value. I was intended to not set a property if there were a value.

Btw, I fixed that on other commits, I needed to check the existence of `program.*` instead of `options.*`