Adaptor support all C++11 allocators

Truly support all C++11 allocators including those which specify a smart pointer as the 'pointer' type.