 - Reimplement sessions parameters negotiation and storage. In IET
   the negotiation isn't iSCSI RFC confirmed: it doesn't support ranges
   of values and, more important, violates RFC in case when in the IET
   config file some value for some parameter is set and a remote
   initiator doesn't initiate the negotiation for this parameter or
   declare its value. According to RFC, in this case IET shall use the
   RFC-specified default value, but it will use config file specified
   one instead. Looks like the implementation confuses IET config file
   default values and iSCSI ones. The default values handling was fixed
   in very dirty and hackish way, but ranges support remains unfixed.
   Storage of set by user parameters should be reimplemented, so they
   will be kept in iscsi-scstd, not in the kernel, as it is currently
   done in IET's code. Using kernel to *only* store parameters is quite
   questionable decision, especially considering that it leads to some
   code duplication between kernel and user space, so remove all
   parameters storage code from kernel. Remove target_param, leave only
   one type of parameters, but separate processing of iSCSI RFC
   parameters from local ones (currently they are mixed up). Also mixing
   up conceptions of "key" and "param" in param_*() and struct
   iscsi_key_ops functions makes the code hardly manageable, particularly
   for adding support for ranges in the negotiation keys, so it needs to
   be fixed as well.

 - Fix SNACK command handling. Currently it violates iSCSI RFC.

 - Consider better integration with TCP internals on receive path to
   improve performance.

 - The target shouldn't crash/hang/etc. on initiators' misbehavior as
   IET likes to do.

 - Minor "ToDo"'s spread in the code.
