Add version ranges to gem dependencies

Lean on semantic versioning constraints to allow us to update dependencies with confidence. Todo on #66.