edge: Replace integer cs by GprsCodingScheme

Currently the TBF and MS object use a plain integer value
(current_cs) to manage the coding scheme. This makes it difficult to
support the MCS schemes. GprsCodingScheme supports a partial ordering
of these values (CS and MCS) and provides safe increment and
decrement methods.

Use the GprsCodingScheme type instead of integer for cs fields and
variables. Add a 'mode' to GprsMs which can be set to either GPRS,
EGPRS, or EGPRS_GMSK which also set the initial values of
current_cs_ul/dl. Select the mode based on max_mcs_ul and max_mcs_dl.

Sponsored-by: On-Waves ehf
diff --git a/tests/ms/MsTest.cpp b/tests/ms/MsTest.cpp
index 344b0b4..0930354 100644
--- a/tests/ms/MsTest.cpp
+++ b/tests/ms/MsTest.cpp
@@ -503,11 +503,11 @@
 	dl_tbf->set_ms(ms);
 	OSMO_ASSERT(!ms->is_idle());
 
-	OSMO_ASSERT(ms->current_cs_dl() == 4);
+	OSMO_ASSERT(ms->current_cs_dl().to_num() == 4);
 
 	bts->cs_downgrade_threshold = 200;
 
-	OSMO_ASSERT(ms->current_cs_dl() == 3);
+	OSMO_ASSERT(ms->current_cs_dl().to_num() == 3);
 
 	talloc_free(dl_tbf);