A couple of small improvements

Here are some improvements that I've been working on today. Still haven't implemented the -e flag, but I'm gonna work on that tomorrow, it's been a busy weekend.

Improvements in this commit:

* Fix a bug where adding a gem wouldn't fail when there is an already exiting gem in the Gemfile that doesn't have a version specified
* Add an ```--optimistic``` and ```--pessimistic``` flags that set the version constraints appropriately
* Some minor code refactoring

I'm thinking that maybe I could have included ```-o``` and ```-p``` flags as short versions of ```--optimistic``` and ```--pessimistic``` flags as well, but I'd like some input from you about that. If you think that's the way the go, I can easily make that change to this pull request right away.

Hope you'll like the improvements. :metal: