Adding support for non-square images

Makes both width and height parameters optional. If you provide a width (or height) Thor will infer an aspect ratio from the first image layer and compute the other dimension from that aspect ratio. You can provide neither and it'll just use the first images dimensions.

Also refactoring some of the image processing into another class.
I'm not incredibly familiar with how package objects are supposed to work, but: ordinarily I've seen them in a file named `package.scala`, and then the package object name would be the same as the directory it lives in, e.g. `package object thor`. This allows for a the members of the package object to be available at the scope of the top level of the package; e.g. `import com.rdio.thor._` gives access to these members.

(see: http://www.scala-lang.org/docu/files/packageobjects/packageobjects.html and section 9.3 of http://www.scala-lang.org/docu/files/ScalaReference.pdf)