zebra: refine suppress-ra management

The recent "ipv6 nd" improvement did not have suppress-ra parameter
reliably coupled between router and interface scopes. Copying
router-scope value to interface-scope parameter behaved differently
depending on the time of interface creation event. The problem is
addressed with a new "default" state for interface-scope suppress-ra
parameter and additional code.

* interface.c:if_zebra_new_hook(): set ifp->info before calling
  rtadv_if_new_hook(), not after, otherwise an attempt to iterate over
  iflist made from the latter will cause a crash
* rtadv_ra_enabled(): a new function to replace direct access to
  interface-scope AdvSendAdvertisements parameter
* rtadv_timer(): use rtadv_ra_enabled()
* rtadv_process_packet(): idem
* rtadv_update_counters(): incremental updates to adv_if_count and
  adv_msec_if_count become cumbersome since the introduction of
  "default" state, the new function does it better
* ipv6_nd_ra_interval_msec(): update to use the helper
* ipv6_nd_ra_interval(): idem
* no_ipv6_nd_ra_interval(): idem
* top_ipv6_nd_suppress_ra(): idem
* top_no_ipv6_nd_suppress_ra(): idem
* rtadv_set_if_enable_ra(): new function to manage interface-scope
  AdvSendAdvertisements and associated multicast/thread tasks
* rtadv_set_top_enable_ra(): likewise, for router-scope
  AdvSendAdvertisements
* ipv6_nd_suppress_ra(): update to use the helper
* no_ipv6_nd_suppress_ra(): idem
* ipv6_nd_suppress_ra_auto(): new DEFUN to set the default mode
* rtadv_config_write(): update for the new "on/off/default" semantics
* top_rtadv_config_write(): articulate both states of router-scope
  parameter, don't hide default
* rtadv_if_dump_vty() change prototype to allow for a loopback test
* rtadv_if_new_hook(): update for the new default state and update
  counters
* doc/ipv6.texi: split RA commands into scopes and update descriptions
zebra: implement connected prefixes for ND RA

Zebra rtadv so far required an explicit "ipv6 nd prefix ..." statement
for each IPv6 prefix to be announced through Prefix Information TLVs in
ND RA messages. This change adds an option for an automatic mapping of
connected IPv6 prefixes into PI TLVs ("ipv6 nd prefix connected-all" et
al.)

* rtadv.h: add struct rtadv_connprefix, extend struct rtadvconf
* rtadv.c
  * struct rtadv: extend with new fields
  * rtadv_new(): update to do more initialization
  * rtadv_cp_enabled(): new helper function
  * rtadv_append_connprefix_tlvs(): new helper function
  * rtadv_send_packet(): update to use the helper
  * rtadv_set_if_cp_none(): new helper function
  * rtadv_set_if_cp_auto(): new helper function
  * rtadv_set_if_cp_all(): new helper function
  * rtadv_set_top_enable_cp(): new helper function
  * rtadv_parse_connprefix(): new helper function
  * if_ipv6_nd_prefix_connectedall: new DEFUN
  * if_ipv6_nd_prefix_connectednone: new DEFUN
  * if_no_ipv6_nd_prefix_connectedval: new DEFUN
  * top_ipv6_nd_prefix_connectedall: new DEFUN
  * top_ipv6_nd_prefix_connectednone: new DEFUN
  * rtadv_print_connprefix(): new helper function
  * rtadv_config_write(): update to use the helper
  * top_rtadv_config_write(): update to use the helper
  * rtadv_init(): list new commands
  * rtadv_refresh_connected(): new exported function
  * rtadv_if_new_hook(): update initialization
* connected.c: update connected_withdraw() and connected_announce() to
  call rtadv_refresh_connected() after connected prefixes list is
  changed
* interface.c: idem for if_delete_update(), ipv6_address_install(),
  ipv6_address_uninstall(), ipv6_address_uninstall()
* doc/ipv6.texi: list new commands