fix undefined index error related to #562
renderEditObjectForm(): use the hidden num_attrs element, even if no
attributes exist, otherwise an exception is thrown when trying to
update attribute-less objects
split tableHandler() into two functions

New buildOpspecColumns() function incorporates the user input validation
code. Its coupling with tableHandler(), which is now focused on SQL
proxying, improves detection of opspec structure errors.
introduce "fix_argname" type of opspec column

Update buildOpspecColumns() to work with just one list of columns, not
an array of lists. Add support for 'fix_argname' type of column and some
error detection. Update tableHandler() to use buildOpspecColumns()
without any intermediate variables.

The new column type stands for an arbitrary constant instead of the
user's HTTP input.
replace 9 ophandlers with opspec entries

Each of the following functions basically stood for a single SQL command
and is now replaced with an opspec structure:

* updateDictionary()
* updateChapter() (w/fix_argname)
* delChapter() (w/fix_argname)
* useupPort() (w/fix_argname)
* linkEntities()
* unlinkEntities()
* destroyVLANDomain()
* addVLANSwitchTemplate()
* delVLANSwitchTemplate()
update Dictionary unique constraint (#593)

Extend Dictionary table with "dict_sticky" column to enable telling
system records from user's records at SQL level, not only at application
level. Redo the UNIQUE constraint to allow for duplicates across these
two groups (but not within). Employ "fix_argname" in two opspec
structures to make system rows protection stronger.
bugfix: IPv4 space exceptions (#591)

IPNetworkCmp relied on strcmp() returned only -1, 0, 1, which is
not true on some PHP installations.
refresh some port/VLAN parsing code
add SNMP support for Cisco 300 switches (#594)
$iftable_processors: change labels of some generic gigabit ports
issue #593 belongs to 0.19.14
improve renderNewSLBItemForm() (#403)

This fixes a case of rendering an SLB management form which would never
work due to missing parameter(s). The new SLB item form now gives a
notice when one of the realms is emtpy.
prevent duplicate object names, with some exceptions (#595)
updateObject() - reference table as Object instead of RackObject when
changing the object type
resolve a PHP warning in resolve8021QConflicts()

A discarded 802.1Q port in "T" configuration would have no "allowed"
array items present on the HTTP request, causing a PHP warning about
"ra_0" and incorrect initialization of $F.
don't feed "none" into iosParseVLANString()

The recent addition of "throw" into iosParseVLANString() revealed, that
the functions below would process "none" in "switchport trunk allowed
vlan none" as a VLAN list. This change fixes it.

* ios12PickSwitchportCommand()
* nxos4PickSwitchportCommand()
* eos4Read8021QConfig()
initial support for Marvell ROS 1.1

This commit introduces a new device breed, "ros11", standing for
Marvell's ROS 1.1. LiveLLDP, Live Ports and 802.1Q functionality is
implemented.

ros11ReadLLDPStatus(): new function, LLDP neighbor list parser
ros11ParsePortString(): new helper function, port list parser
ros11TranslatePushQueue(): new function, CLI output translator
ros11Read8021QConfig() new function, one of the 802.1Q parsers
ros11Read8021QScanTop(): idem
ros11Read8021QVLANDatabase(): idem
ros11Read8021QPorts(): idem
ros11ReadInterfaceStatus(): new function, port status parser
ros11ReadMacList(): new function, MAC address table parser
detectDeviceBreed(): add "ros11" detection
queryTerminal(): add "ros11" case handling
$breedfunc: list new "ros11" functions
refresh eos4Read8021QConfig()

Justify the regexp to match numeric VLAN IDs only; don't pick the
default VLAN up second time.
fixed detection of JunOS 12R

detectDeviceBreed: return 'jun10' for JunOS 12
support for fetching configs from IOS XR 4 devices

new breed 'iosxr4'
queryTerminal: added iosxr4 support
iosxr4SpotConfigText: new function
iosxr4TranslatePushQueue: idem