Update code to handle hashmake 0.1.5 changes.
Add Network, Link classes.
Setup links with the Link class instead of directly to another port.
Add classes for storing a Network: PortLocater, LinkModel, BlockModel, and NetworkModel.
The storage design allows the network to be represented without referring to specific block objects.
Adjust code to fit actual hashmake-0.1.5 gem (previous changes were for unrelease hashmake).
Rename *Model to *State.
Add export methods to Network, Block, and Link, for producing *State objects.
Pass ParamInPort to Block in order to get/set block sample rate.
Pass arg specs Hash to Block in order to build up an args Hash to store in block state.
Add documentation comments.
Add TestBlock class to spec helper.
Do not pass :arg_specs to Block parent class, nor :hashed_args to BlockState.
Pass all blocks the :sample_rate key.
Remove sample_rate_port from Block params. For the forseeable future, blocks will just be initialized with a given sample rate, and if a different sample rate is desired then a new block can be built.
Add Limiter classes: upper, lower, range, enum (value must be one of an enumerable), and no limit.
ParamInPort can use a Limiter, and default is NoLimiter.
SignalInPort can use a Limiter (except for EnumLimiter), and default is NoLimiter.
Remove dependency on spcore.
Add SPNet::make_range_limiter.
Add make_lower_limiter and make_upper_limiter, convenience methods to create a LowerLimiter or UpperLimiter object from a specification string.
Remove helpers (make_range_limiter, make_upper_limiter, etc.). They don't actually help very much. Just make it easier to build limiters instead by not passing Limit objects. Give limit value and inclusive flag instead.
Stop using Limit class.
Change #limit_value to #apply_limit.
Change RangeLimiter#upper_limiter to RangeLimiter#upper.
Change RangeLimiter#lower_limiter to RangeLimiter#lower.
Change UpperLimiter#value to UpperLimiter#limit.
Change LowerLimiter#value to LowerLimiter#limit.
Update for gem release.