Here's a starting point. It needs a lot more polish.

First, make a bottle:

 {p1, p2, p3, p4} = Table[{i, 0.5}, {i, 4}];
 if = Interpolation[{{0, 1/2}, p1, p2, p3, p4, {5, 1/2}}];
 
 Column[{
 LocatorPane[
 Dynamic[{p1, p2, p3, 
 p4}, ({p1, p2, p3, p4} = #; 
 if = Interpolation[{{0, 1/2}, p1, p2, p3, p4, {5, 1/2}}]) &], 
 Dynamic@Plot[if[x], {x, 0, 5}, PlotRange -> {{0, 5}, {0, 1}}]],
 Dynamic[
 bottle = 
 RevolutionPlot3D[{if[x], x}, {x, 0, 5}, PlotStyle -> Opacity[0.5],
 Mesh -> None]]
 }]

![Mathematica graphics](https://i.sstatic.net/tW0iw.png)

Then fill it and animate it:

 volume = Derivative[-1]@FunctionInterpolation[if[x]^2, {x, 0, 5}]

 Table[Rasterize@
 Show[bottle, 
 RevolutionPlot3D[{0.95 if[x], x}, {x, 0, 
 InverseFunction[volume][t]}, Mesh -> None, 
 PlotStyle -> Blue]], {t, 0, volume[5], 0.1}] // ListAnimate

![Mathematica graphics](https://i.sstatic.net/elKYv.png)