Add functionality for reference counting

improvement for locking: when we use an object O over a long period of time,
but only at several points, we should do this:
- use a read lock to retrieve a valid pointer p for object O
- reference the object O so that it would not be deleted after unlock
- unlock

Here, whenever we will need to access the fields a, b and c of object O,
we will use a rw lock of O. However, even when no lock is being held,
we can have the assurance that the pointer p will point to a valid object.

Deletion of a referenced object does not always happen instantaneously:
it happens when all references to it have been removed (i.e. refCount is 0).
On debug mode, we should have OVS_USE_RCU_CALL_STACK and OVS_USE_ASSERTS set

By default, we should have all code checkings enabled in debug mode.

Also, if OVS_USE_RCU_CALL_STACK is set, a "call stack" is registered in the OVS_RCU struct of the objects, so that, if a deference is missing, it would be easier to track the problem.

A function name is saved for the current thread (array of ref calls) in the rcu struct whenever a reference is done, and it is removed from it whenever a dereference happens.
add annotations for some func params
remove unused function: PersPort_CreateInternalPort_Unsafe
rename pPersPort -> pPort and pPersistentPortsInfo to pPorts

reason: shorten the variable names, makes the code more readable.
In the file PersistentPort.c it is clear that the ports in cause are
persistent ports
Improve code readability in pers port find funcs

o) Rename pPort -> pOutPort: it shows that it's the port we return
o) Use a local variable instead of pPorts->portsArray[i], when needed in more places
o)Use LIST_FOR_EACH instead of LIST_FOR_EACH_ENTRY: it's shorter
and more straightforward. It assumes the list entry member in struct is listEntry, which is the convention for the structs in this driver.
Rename OVS_DATAPATH's pStatsRwLock to pRwLock

The lock will be used to protect more than the datapath's stats.
rename FilterUnload -> DriverUnload

The driver's entry point func is called DriverEntry,
therefore, the exit point should better be called DriverUnload
rename OVS_IPV4_INFO -> OVS_NET_LAYER_INFO

Reason: the old name is wrong. The struct is actually for any net layer protocol:
ipv4, ipv6, arp.
Use macros for locking the datapath

the macros: DATAPATH_LOCK_READ, DATAPATH_LOCK_WRITE, DATAPATH_UNLOCK
reasons:
o) better clarity when studying the code for locks and unlocks, especially
when there are multiple objects locked in the function, or the same object
is locked and unlocked for multiple times.
o) it might help for debugging, if we want to add custom behavior / debugging
info, whenever a datapath is being locked / unlocked.
Use macros for locking the forward info object

the macros: FWDINFO_LOCK_READ, FWDINFO_LOCK_WRITE, FWDINFO_UNLOCK
reasons:
o) better clarity when studying the code for locks and unlocks, especially
when there are multiple objects locked in the function, or the same object
is locked and unlocked for multiple times.
o) it might help for debugging, if we want to add custom behavior / debugging
info, whenever the forward info is being locked / unlocked.
remove unused functions in Sctx_Nic.h

HaveNdisPortExternal and HaveNdisPortInternal_Unsafe.
rename fields "link", "entryInTable" -> "listEntry"

in structs: OVS_SWITCH_INFO, OVS_FLOW.
create named struct OVS_FLOW_STATS for OVS_FLOW

previously, it was an unnamed struct inside OVS_FLOW.
Add OVS_RCU & rw locks to structs that need reference counting

The structs that require reference counting:
OVS_DATAPATH, OVS_FLOW, OVS_FLOW_TABLE, OVS_PERSISTENT_PORT,
OVS_NIC_LIST_ENTRY, OVS_PORT_LIST_ENTRY, OVS_SWITCH_INFO.

Some structs need rwlocks to protect their children / fields.
Up to this point, the forwarding info was locking for much about anything,
but that is not efficient, because it holds the lock for a longer period of time.
Add struct: OVS_ACTIONS

We need to use ref counting for actions as well. ATM we have the actions
stored as OVS_ARGUMENT_GROUP, but this struct does not have rcu. The OVS_ACTIONS
struct will contain the group of actions as OVS_ARGUMENT_GROUP and the rcu
refactor: extract function from ExecuteActions

The code to find a dest persistent port got a bit too large
Use OVS_ACTIONS and use OVS_FLOW's rw lock to protect pFlow's fields

We use OVS_FLOW's rw lock to protect all of its fields,
including the ptr pActions. pActions is now an OVS_ACTIONS
and is using reference counting.
Use OVS_FLOW's ref count

The flow is protected against deletion by the Flow Table's rw lock.
The Flow Table's rw lock will protect only its fields.
The global fow table rw lock that used to be used was /is protecting
the flow table as well.
Use Flow table's ref count

the object flow table will be protected against deletion by
the datapath's rw lock. The datapath's rw lock now protects
all its fields.