Refactor `build_from_hash` to convert dot notation to hash first

This ensures that we're handling all forms of nested tables the same way.

We're aware that the `convert_dot_notation_to_hash` method will cause a
performance hit, and we intend to come back to it once we've refactored some of
the surrounding code.

[Melissa Xie & Melanie Gilman]
I don't think we need to make those sorts of optimizations here just yet, especially since those allocations were there before.