Shape restricted function models via polyhedral cones

Enforce richer shape constraints (convexity/concavity and combinations with monotonicity) by constraining coefficient vectors to polyhedral cones. Implement a PyTorch cone layer and fit concave functions.