This idea would apply to all blocks which have a slab and stair form, but let's start with cobble.
Right now, there are separate blocks for a full cobblestone block, a cobblestone slab block with three different types (top, bottom, double), cobblestone stairs with four facings (north, south, east, west), a state to indicate normal stair versus inverted, a state with five values to indicate normal or bent.
This idea is to unify all of those into a single "cobblestone block" whose blockstate consists of eight boolean values (named NEU, NWU, SEU, SWU, NED, NWD, SED, SWD), each indicating the presence of absence of a particular corner.
After this change, an "upper cobblestone slab" would become a cobblestone block whose blockstate has True values for all of NEU, NWU, SEU, SWU and False values for all of of NED, NWD, SED, SWD, with a "bottom cobblestone slab" having these the other way around.
Post change, a normal cobblestone stair would become a cobblestone block whose blockstate has True values for all of NED, NWD, SED, SWD, and also True for between one and three of NEU, NWU, SEU, SWU, depending on if it's an inside corner, straight, or an outside corner.
Before the change, "vertical cobblestone slabs" or "sideways cobblestone stairs" would need a mod, whereas after the change they are nothing more than specific collections of blockstates.
Similarly, if someone wanted something strange like a "cobblestone step" (one half of a slab), or a "cobblestone lump" (one eighth of a block, all by itself), or a "cobblestone corner post", these would be trivial to implement without needing any actual new blocks.
Also, it would be easy to provide some sort of chisel, which "mines" a cobblestone lump from a cobblestone block, turning a full cobblestone block into an cobblestone inside corner stair, an inside corner stair into a straight stair, a straight stair into an outside corner stair, and so on and so forth, dropping a "cobblestone lump" of a block each time.
One thing which this idea has almost lost is "double slabs"... all blocks would have a blockstate called double; this would NOT be a boolean, but have four values: nope, UD, EW, NW. Nope means it is not a double slab, UD means it is a normally oriented double slab (drawn with horizontal lines halfway up each of it's north, south, east, and west faces), EW and NS mean horizontal double slabs.
One thing which will actually be lost, is stairs automatically connecting with neighbors, even when moved by pistons. It becomes the responsibility of the stair item to decide if the block it produces will be straight or a corner, and to change any adjacent stair-like blocks.