Common changes for Scala[Option, Map, Multi]Binders.

I ended up writing some code for ScalaMapBinder as well and ended up refactoring quite a few things and coming up with something that's slightly cleaner for ScalaOptionBinder and ScalaMultibinder.

This pull request is the common stuff across all three of them; so you'll probably want to look at it first as you'll see these changes in each of those pull requests too.