Split parts of main() into separate functions

This makes the main function a lot more clear and allows easier mixing
of code.
Merge the device and driver configuration profiles

Storing these in a single array can make the code a bit simpler, at the
expense of storing four extra null bytes (one extra pointer) for each
device profile.
Add a name to each configuration profile

This helps in identifying the used profile to the user for debugging.
Add generic profile for cdc_acm and usbserial devices

Note that these particular profiles have not been tested at all, it's
just a way to get these devices detected in the first place.
Warn not to include deviceconfig.h
Move the umts_profile declaration to simplify code
Make the profiles list const
Add UMTS_NUM_MODES constant
Add command to list available profiles

This can be used from a GUI to do advanced configuration based on an
existing configuration.

The output format is just something simple, it probably needs to be
changed to something more parsable later on.
Reset errno after initializing uci

When running umtsd as non-root, uci might trigger errors which are
subsequently ignored. This shouldn't occur in practice, but leaving this
errno lying around could cloud debug output.
Rewrite modem detection code

Instead of listing the available tty devices and finding out the other
info from there, start with listing all usb devices and find out if each
of them has tty devices. This should be a bit more robust and allows for
listing all available devices in the future (instead of always stopping
at the first match), without risk of returning a device multiple times
(once for each tty it offers).
Add command to list all available devices
Don't assume a USB pid of 0x0 is invalid

Previously, a pid of 0x0 was used to signal "Don't match the pid".
However, a pid of 0x0 can be valid (in particular, the Alcatel X060s
uses 0x0), so now we explicitely store the validity of the pid (and
vid as well) fields in a new flags field.
Fix typo in README.md
Move some utility functions the the a new util.c file
Split off the parsing part of umts_util_read_hex_word
Allow filtering devices on given vendor/product id
Only find out device_id once for each device

In addition, when looking for a : in the device id to filter out
subdevices, now only the device id is checked, not the entire sysfs
path.
Allow specifying a specific device id on the commandline
Use the USB device to identify a device

Previously, the tty device node was used in most debug output.