CLEANUP: sample: generalize sample_fetch_string() as sample_fetch_as_type()

This modification makes possible to use sample_fetch_string() in more places,
where we might need to fetch sample values which are not plain strings. This
way we don't need to fetch string, and convert it into another type afterwards.

When using aliased types, the caller should explicitly check which exact type
was returned (e.g. SMP_T_IPV4 or SMP_T_IPV6 for SMP_T_ADDR).

All usages of sample_fetch_string() are converted to use new function.
diff --git a/include/proto/sample.h b/include/proto/sample.h
index 02ccc52..6a01ed3 100644
--- a/include/proto/sample.h
+++ b/include/proto/sample.h
@@ -33,9 +33,9 @@
 struct sample *sample_process(struct proxy *px, struct session *sess,
                               struct stream *strm, unsigned int opt,
                               struct sample_expr *expr, struct sample *p);
-struct sample *sample_fetch_string(struct proxy *px, struct session *sess,
+struct sample *sample_fetch_as_type(struct proxy *px, struct session *sess,
                                    struct stream *strm, unsigned int opt,
-                                   struct sample_expr *expr);
+                                   struct sample_expr *expr, int smp_type);
 void sample_register_fetches(struct sample_fetch_kw_list *psl);
 void sample_register_convs(struct sample_conv_kw_list *psl);
 const char *sample_src_names(unsigned int use);