To manage beer profile on arduino a new command (p) is added. Running
'p{}' provides following output:
p:{"x":0,"t":0,"r":0,"p":0,"s0": 0.000,"d0":10,"s1": 0.000,"d1":0,"s2":
0.000,"d2":0,"s3": 0.000,"d3":0,"s4": 0.000,"d4":0,"s5":
0.000,"d5":0,"s6": 0.000,"d6":0,"s7": 0.000,"d7":0}
x: current profile step
t: how many minutes in on current step profile is
r: profile active (0=no, 1=yes)
p: interpolation scheme (0=linear, 1=smoothstep, 2=smootherstep
(3=reserved, defaults to linear))
s0-s7: profile step setpoint
d0-d7: profile step duration (minutes)

p command can be issued with any of the arguments to set the value, if
no value is set then old value is kept.
For the profile to run, profile data need to be assigned and "r"
attribute needs to be set to one (1) and mode needs to be switched to
"p" (beer profile) (j{mode:p}). This allows profile mode to work as
usual from script as well.
It is up to the caller to set x and t correctly (i.e. 0 when starting
the profile). This gives the flexibility that you could 'jump' around in
the profile (so when you notice fermentation subsides, you can move to
next step to ramp up temperature for example).

For interpolation, linear, smoothstep and smootherstep is implemented.
(I first made a huge misstake in doing this in floating point arithmetic
which made compiled code way to big, it was rewritten in fixed point
which is kind of unreadable but way smaller). I really think linear
should be good enough, but smooth(er)step should definately suffice. It
would possible to implement further scheme(s), but I kind of doubt it
will be worthwhile.

Since duration is stored in minutes, I made the choice to calc setpoint
every minute as well, I think this will be good enough and it makes code
simpler.

The data is stored in EEPROM and restored on restart. Every 30 mins of
the profile running, progress is stored (hardcoded, this maybe should be
user definable?). 8 steps currently allowed, this is easy to change (see
#define PROFILE_SIZE). 

I have tried my best to follow how other things are implemented in
brewpi, but if there are things you are not satisfied with, then feel
free to make changes. I'm sure there are bugs as I have had limited
possibilites for testing yet.

I'm not sure about updating setpoint and the LCD, I see there is some
handling when setpoint is set via j command. That might need
improvement. It might be cool to be able to set profile data from LCD
also.

New files:
ProfileManager.cpp	- ProfileManager, parsing JSON data frm command and
sending response
ProfileManager.h
ProfileControl.cpp	- Logic for running the profile
ProfileControl.h