insert/push_back/push_front range extension

Add range-based non-member non-friend insert extension, push_back/push_front utilities that build upon it, and RANGE_RETURNS utility macro.

Closes #4 .
Should functions taking a range have the same name than those taking a value?

Providing a single function that does the right thing (append a value, or a range) depending on the argument results in an easier API. Since these algorithms cannot provide any exception guarantee that works for _every_ `Iterable`, I don't think using two different names is worth it.

About naming, I think we agree on `insert`:
- `insert(ExtensibleIterable& i, Position&& p, InputIterable&& input)`
- `insert(ExtensibleIterable& i, Position&& p, Value&& v)`

Bikeshedding on the concept names, I like `Extensible` more than `Insertable`, and since i'm used to `push_back` from Boost.Range and the STL containers I prefer `push_back` (`BackExtensible`) and `push_front` (`FrontExtensible`) more than `append` (`Appendable`) and `preppend` (`Preppendable`), but I'm open for better alternatives.