How would one get the end points of a polyline?

It is easier with Fiona, more "Pythonic", and list slicing:

import fiona
with fiona.drivers():
   for line in fiona.open("some_shapefile.shp"):
         # print first and last point of every line
         print line['geometry']['coordinates'][0], line['geometry']['coordinates'][-1]

And with shapely:

from shapely.geometry import Point
for line in fiona.open("some_shapefile.shp"):
   print Point(line['geometry']['coordinates'][0]), Point(line['geometry']['coordinates'][-1])

And you can construct you polygon and save it with Fiona

New: using the suggestion of sgillies (boundary) with the shape function of shapely

from shapely.geometry import shape
for line in fiona.open("some_shapefile.shp"):
     print shape(line['geometry']).boundary[0], shape(line['geometry']).boundary[1]

You can do this with the GDAL/OGR python bindings. Here's a link to the OGR API tutorial.

A worked example:

from osgeo import ogr

ds=ogr.Open(somepolylines)
lyr=ds.GetLayer()
for i in range(lyr.GetFeatureCount()):
    feat=lyr.GetFeature(i)
    geom=feat.GetGeometryRef()
    firstpoint=geom.GetPoint(0)
    lastpoint=geom.GetPoint(geom.GetPointCount()-1)
    print firstpoint[0],firstpoint[1],lastpoint[0],lastpoint[1] #X,Y,X,Y