Use bcrypt's public cost attr, not internal constant

See:

- https://github.com/codahale/bcrypt-ruby/pull/63
- https://github.com/codahale/bcrypt-ruby/pull/64
- https://github.com/codahale/bcrypt-ruby/pull/65
Merge pull request #12339 from tjschuck/bcrypt_cost_attr

Use bcrypt's public cost attr instead of internal constant
simplify each method.

Stop writing terrible code Aaron.  This is Ruby, not Scheme
stop splatting things back and forth
stuff the join dependency object in the "anything goes" hash.
merge JoinDependency as outer joins

Merge JoinDependency objects as outer joins
delete unused code

Now that we merge trees from the top down, we don't need to search
through the whole tree for particular nodes, just walk it and merge.
nodes do not need to be sorted
pass the parent node to the construct method
the parent node is on the stack, so use it

we don't need to walk back up the node's parents when we have the parent
on the stack
refactor a little so we can remove some methods
flatten and flatten! methods for ActiveSupport::Duration
No need to require rbconfig as we are using Gem.ruby
Merge pull request #12503 from arunagw/removed-unused-require

No need to require rbconfig as we are using Gem.ruby
Merge pull request #12480 from iwiznia/master

flatten and flatten! methods for ActiveSupport::Duration
no reason to do this column addition and subtraction business
Revert "Merge pull request #12480 from iwiznia/master"

This reverts commit e5f5a838b96a362534d9bb60d02334439ed9784c, reversing
changes made to d7567f3290a50952494e9213556a1f283a6cf3a0.