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
Add arel to Gemfile
Address ORA-00972: identifier is too long
Oracle database does not support release savepoint
Oracle currently handles empty string as null