REORG/MEDIUM: server: move the maintenance bits out of the server state

Now we introduce srv->admin and srv->prev_admin which are bitfields
containing one bit per source of administrative status (maintenance only
for now). For the sake of backwards compatibility we implement a single
source (ADMF_FMAINT) but the code already checks any source (ADMF_MAINT)
where the STF_MAINTAIN bit was previously checked. This will later allow
us to add ADMF_IMAINT for maintenance mode inherited from tracked servers.

Along doing these changes, it appeared that some places will need to be
revisited when implementing the inherited bit, this concerns all those
modifying the ADMF_FMAINT bit (enable/disable actions on the CLI or stats
page), and the checks to report "via" on the stats page. But currently
the code is harmless.
diff --git a/include/proto/backend.h b/include/proto/backend.h
index 8043613..601a61a 100644
--- a/include/proto/backend.h
+++ b/include/proto/backend.h
@@ -61,7 +61,9 @@
 
 	if (!srv->eweight)
 		return 0;
-	if (state & (SRV_STF_GOINGDOWN | SRV_STF_MAINTAIN))
+	if (srv->admin & SRV_ADMF_MAINT)
+		return 0;
+	if (state & SRV_STF_GOINGDOWN)
 		return 0;
 	if (!(state & SRV_STF_RUNNING))
 		return 0;
@@ -77,7 +79,9 @@
 
 	if (!srv->prev_eweight)
 		return 0;
-	if (state & (SRV_STF_GOINGDOWN | SRV_STF_MAINTAIN))
+	if (srv->prev_admin & SRV_ADMF_MAINT)
+		return 0;
+	if (state & SRV_STF_GOINGDOWN)
 		return 0;
 	if (!(state & SRV_STF_RUNNING))
 		return 0;
@@ -90,6 +94,7 @@
 static inline void srv_lb_commit_status(struct server *srv)
 {
 	srv->prev_state = srv->state;
+	srv->prev_admin = srv->admin;
 	srv->prev_eweight = srv->eweight;
 }
 
@@ -99,6 +104,7 @@
 static inline int srv_lb_status_changed(const struct server *srv)
 {
 	return (srv->state != srv->prev_state ||
+		srv->admin != srv->prev_admin ||
 		srv->eweight != srv->prev_eweight);
 }