avoid blocking on partials creation

On Java 8, the method ConcurrentHashMap.putIfAbsent uses a lock on the Node instance that is the representation of the map key, even if the element is already existent. This PR uses the get method to avoid blocking operations.

cc/ @juliusv @matttproud @grandbora @herval
I share @grobie 's concerns. putIfAbsent is atomic, that's the whole point of it. If the new code is executed concurrently, two threads may assess that `child == null`, so the will both add (and then return) their own instance of child. Only the one that was put latst will actually be the one in the children map. I don't understand the java client enough to judge if that's actually a problem, but fundamentally it is a problem. Or am I missing something?