Replaced ReuseCapabableOracleFactory with Supplier<ReuseCapableOracle>
Do not fetch oracle from ThreadLocal more often than necessary
Initialize ThreadLocal with initial value
getRoot() does not need to by synchronized