Added ShaperNetDeviceFace

Derive ShaperNetDeviceFace class from NetDeviceFace. Currently it's just a skeleton and behaves the same as NetDevice. Shaping behavior will be added in SendImpl() and ReceiveFromNetDevice() later on.
Added EnableShaper() to NDN Stack Helper

Added EnableShaper() to NDN stack helper so that users can control whether to use NetDeviceFace or ShaperNetDeviceFace.
Initial implementation of the shaper

Implemented our shaper but did not adjust the interest shaping rate based on the demands from the reverse direction.
Made the shaper adjust the rate based on demand

Made the shaper adjust the interest shaping rate based on the demand from the reverse direction.
Let ShaperNetDeviceFace generate NACKs

Minor change to ForwardingStrategy so that ShaperNetDeviceFace causes NACKs when the interest queue is full.
Refined StackHelper and the test case

Let StackHelper::EnableShaper() set Headroom and UpdateInterval. Made the test case more interesting by having two-way traffic and heterogeneous content payload size.