Change ByteBufAllocator.buffer() to allocate a direct buffer only when the platform can handle a direct buffer reliably

 - Rename directbyDefault to preferDirect
 - Add a system property 'io.netty.prederDirect' to allow a user from changing the preference on launch-time
 - Merge UnpooledByteBufAllocator.DEFAULT_BY_* to DEFAULT