Adding for_each, changing core traits.

The addition of for_each requires the value type of a range.
Modified the core traits (size, difference, value) to use the
same basic structure and also removing references before
computing.

Added a base class to the range header to automatically
define the required associated types for any range adaptors.