Implement Generic SIM Access interface as per 3GPP TS 27.007

According to 3GPP TS 27.007, sections 8.17 and 8.18, the modem
may *optionally* provide Generic and/or Restricted SIM Access
to the TE (Terminal Equipment) by means of the AT commands.
This basically means that a modem can act as a card reader.

Generic SIM Access allows the TE to send raw PDUs in the format
as described in 3GPP TS 51.011 directly to the SIM card, while
Restricted SIM Access is more limited, and thus is not really
interesting to us.

This change implements a new transport called ModemATCommandLink,
so using it a SIM card can be read and/or programmed without the
need to remove it from the modem's socket. A downside of this
approach is relatively slow I/O speed compared to PC/SC readers.

Tested with Quectel EC20:

  $ ./pySim-read.py --modem-dev /dev/ttyUSB2

Change-Id: I20bc00315e2c7c298f46283852865c1416047bc6
Signed-off-by: Vadim Yanitskiy <axilirator@gmail.com>
diff --git a/pySim/utils.py b/pySim/utils.py
index 20eb5a8..496b918 100644
--- a/pySim/utils.py
+++ b/pySim/utils.py
@@ -485,6 +485,10 @@
 		print("Using Calypso-based (OsmocomBB) reader interface")
 		from pySim.transport.calypso import CalypsoSimLink
 		sl = CalypsoSimLink(sock_path=opts.osmocon_sock)
+	elif opts.modem_dev is not None:
+		print("Using modem for Generic SIM Access (3GPP TS 27.007)")
+		from pySim.transport.modem_atcmd import ModemATCommandLink
+		sl = ModemATCommandLink(device=opts.modem_dev, baudrate=opts.modem_baud)
 	else: # Serial reader is default
 		print("Using serial reader interface")
 		from pySim.transport.serial import SerialSimLink