When underlying iterator returns by value the corresponding position_iterator
was providing iterator_adaptor with a reference type what lead to returning
a reference to a local variable in dereference operator.
Made a custom trait because it is a way more elegant than:
```cpp
typedef typename boost::mpl::if_c<
boost::is_reference<reference>::value,
typename boost::add_reference<
typename boost::add_const<
typename boost::remove_reference<reference>::type
>::type
>::type,
typename boost::add_const<reference>::type
>::type const_reference_type;
```
Fixes https://svn.boost.org/trac10/ticket/9737.
Boost's iterator.hpp is deprecated, too. It does nothing but pulling std::iterator into namespace boost and including standard headers 'iterator' and 'cstddef'. Therefore get rid of all of that and replace inheritance by lifting std::iterator's members into the derived class.