Prevent passing of non-POD types to POD-only interfaces.

Reviews: @rec @howardhinnant
Either works and we've been using both, even today.  The return type method was more likely to work with older compilers, however I do not believe that is a concern for us today.  As far as I know at this time this is a purely stylistic decision.  From a stylistic viewpoint I have a slight preference for putting it in the template declaration.  But that's nothing I'll loose sleep over, and I'm open to arguments for why the return type is a better place.  The return type method never works for constructors, so we have to use the template argument technique there.